状态机的分层, 并发和交互
状态机很复杂怎么办, 最有效的办法是把状态机按照分层和并发的方法来分解. 分层的意思是指: 状态机有些状态里包含有若干个小状态机, 但如果离开这个状态的话,这个状态里面所包含的状态机全部会变为无效, 这种状态叫做复合状态, 这样就可以把很复杂的状态机需求分解为如顶层状态机, 第二层, 第三层, ...这是一种非常行之有效的方法, 在化解复杂性的同时体现了状态机的生命周期, 但如果要重用就不是其所长了.
并发的意思是指:在执行一个动作或过程的同时还要能够照常响应其他事件, 或者同一个事件会引起不同状态机不同的动作, 比如在空闲的时候可能有若干个并行的状态机在运行, 但可能只有一个(主)状态机是真正在响应空闲时的事件的, 其他状态机可能只是在空转, 但如果(主)状态机如果接受某个事件而变迁到另一个状态, 可能会激活空闲时空转的那些并行状态机运行, 也切换到另一个状态, 这样相互合作从而完成一系列有效预定的任务. 并发不但能增强实时性, 降低复杂性, 而且能够达到状态机重用的目的, 如果你有若干复合状态都会执行同样的动作,不妨把他作为一个并发的模块来处理, 当然不可滥用, 因为并发的引入同样会引入状态机之间的同步等问题,可能使在某种情况下会带入不可预测的结果.
状态机之间的交互最常见和有效的就是信号和事件(消息), 信号一般会在发出后立即执行响应这个信号的状态机, 而事件发出后可能并不会马上执行, 可能进入事件队列然后执行其他任务等待下一个事件分发时时才真正执行, 当然这个根据具体实现会有所差别罗.
关于这些知识大家可以看visual state的user manual, 上面还是说得很清楚的 对MDD(模型驱动开发)有兴趣的可参考UML和rhapsody.
|
|