有限状态机(FSM)编程修炼黄师傅第一章20多年以前,DavidHarel创造了状态机理论来描述复杂的交互系统。随后,状态机理论赢得了广泛的接受,并且被引入到许多软件系统中,最突出的是被引入到UML中作为其一个组成部分。什么是有限状态机有限状态机系统,是指在不同阶段会呈现出不同的运行状态的系统,这些状态是有限的、不重叠的。这样的系统在某一时刻一定会处于其所有状态中的一个状态,此时它接收一部分允许的输入,产生一部分可能的响应,并且迁移到一部分可能的状态。第一章有限状态机要素Transition(迁移)从一个状态切换到另一个状态被称为Transition(“迁移”)。引起状态迁移的事件被称为triggeringevent(“触发事件”),或者被简称为trigger(“触发”)。Action(动作)当一个Event被状态机系统分发的时候,状态机用Action(“动作”)来进行响应,比如修改一下变量的值、进行输入输出、产生另外一个Event或者迁移到另外一个状态等等。State(状态)一个系统在其生命周期中某一时刻的运行情况,此时,系统会执行一些动作或者等待一些外部输入。Guard(条件)状态机对外部消息进行响应的时候,除了需要判断当前的状态,还要判断跟这个状态相关的一些条件是否成立。这种判断称为guard(“条件”)。guard通过允许或者禁止某些操作来影响状态机的行为。Event(事件)就是在一定的时间和空间上发生的对系统有意义的事情。第二章为什么要用状态机编程节省时间从无序的,繁重的工作中解脱第三章状态机修编程炼IF...ELSEIF...ELSE1SWITCH...CASE2第三章状态机修编程炼SWITCH...CASE2第三章状态机修编程炼SWITCH...CASE2第三章状态机修编程炼SWITCH...CASE2第三章状态机修编程炼分析:这个是最简单、最常用的FSM实现方法。通过嵌套的2层switchcase实现。外层switchcase判断状态,内层switchcase判断消息。状态采用枚举量。优点:结构简单,便于理解。缺点:代码冗长。结论:这种代码结构感觉比较冗长,不建议在复杂的状态机中使用。优缺点TABLE13第三章状态机修编程炼TABLE13第三章状态机修编程炼这种FSM实现方法对switchstatement进行了改良。根据state、event做成了2维表格,表格中的项就表示action和transition。状态采用枚举量。优点:结构简单,便于理解。代码比较简练。效率最高。缺点:代码结构不是太好,仍然只是针对具体问题。结论:这是一种常用的实现方法。如果没有更好的选择,可以使用。优缺点TABLE23第三章状态机修编程炼这TABLE2只是TABLE1的改良版本,将Action封装API。优缺点TOOLvsLIB4第三章状态机修编程炼TOOLLIBVSTABLE3TABLE4---TOOL4第三章状态机修编程炼这TABLE4只是TABLE3的改良版本,更规范些。这以上宏定义ini的状态机。TABLE3TABLE4---TOOL4第三章状态机修编程炼这TABLE4只是TABLE3的改良版本,更规范些。ini_trans_define对ini状态机进行初始化,及转换表的设置。TFSM_DISPATCH实现事件分发。TABLE5---LIB4第三章状态机修编程炼通过这些api调用实现状态机编程。TOOLvsLIB一个是产生代码,一个是提供api供调用者调用。总结4第三章状态机修编程炼状态机编程修炼唯一没用到得元素Guard,供大家讨论如何是用。该怎样进行时间管理效益效能效率勤恳分享时间产生的效益和“效能、效率、勤恳”三要素之间的关系为:效益(Benefit)效果与利益,是最终追求的结果效能(Effectiveness)强调目的正确、效果有利效率(Efficiency)是指在单位时间里完成的工作量勤恳(Diligence)充分利用时间,不浪费在这三个要素中,效能最为重要,效率次之,勤恳再次之。也就是说,做好时间管理,选择做最重要的事(效能)是根本,然后再正确地去做事(效率),最后再根据前两个要素的实际效果并结合原定计划,保持适度的勤恳。也就是说,勤恳必须在做正确的事和正确地做事这两个前提条件下,否则,盲目的勤恳,对实现时间管理的效益作用不大,反而让自己活的很累。黄师傅