在学习状态机(FSM、HSM、状态模式、UML状态机等等)的过程中,不可避免的有一些重要的概念或知识点不断出现,因此做一个大概的总结,加深大脑对它们的感知程度。
1. 状态(State)
组合状态(Composite):状态内嵌套了若干子状态。可以包含顺序子状态(Disjoint)和并发子状态(Parallel)。
区域(Region):组合状态包含多个活动子状态时,使用区域做为容器来包含子状态。
正交状态(Orthogonal):包含两个或两个以上区域的组合状态。
并发状态(Parallel):当前有多个活动子状态的组合状态。定义同正交状态。
复合状态(Compound):当前只有一个活动子状态的组合状态。应该就是顺序子状态。
历史状态(History):代表上次离开组合状态时的最后一个活动子状态。只是一个伪状态,只能做为一个组合状态中的子状态,不能在顶层状态机图中使用。
伪状态(Pseudo):
2. 转移(Transition):在事件的触发下,一个状态可以转移到另一个状态。转移的类型有自转移、内部转移、自动转移、复合转移。完整的格式是“事件(参数)[条件]/动作”。
3. 事件(Event):会触发一个状态的转移。
1) 入口事件(Entry):QEP use as Action
2) 出口事件(Exit) :QEP use as Action
3) 动作事件(Do):
4) 信号事件(Signal):异步
5) 调用事件(Call):一般为同步调用,也可以是异步调用。如果调用者需要等待操作的完成,则是同步调用,否则是异步调用。
6) 改变事件(Change):表示一个通知信息,通知某个条件已为真,以触发一个转移。和监视条件(Guardian)不同,监视条件是在事件触发时求值,而改变事件是在条件为真时被触发。
7) 时间事件(Time):表示一个通知信息,通知自进入状态以来某个时间期限已到,以触发一个转移。
8) 延迟事件(Deferred):本状态不处理、推迟或排队等待另外一个状态才处理的事件。
4. 活动(Activity):由一系列动作组成,非原子操作。如组合状态中的每一个子状态机图都对应于该状态内的正在进行的一个活动,存在状态的迁移导致活动被打断。活动图和状态图区别
5. 动作(Action):一组可执行语句或计算处理过程,原子操作。动作的类型有入口动作、出口动作、调用动作、延迟动作、创建动作、销毁动作、返回动作、终止动作、发送动作、本地调用动作、例外动作。
6. 上下文(Context):动作针对对象,包含静态数据和指令;状态机针对对象业务逻辑,包括动态处理流程。上下文负责将静态的数据和指令传递给动态的流程,对象上下文和状态机上下文。