EA&UML日拱一卒-状态图::子状态机
数字式车辆信号灯
系统分解之后,接下来的工作就是对每个模块进行建模。今天是第一个模块:数字式车辆信号灯DigitalVehicleLight。
先看图。
子状态机
为了能够在交通信号系统中作为一个模块被调用,通过子状态机来定义DigitalVehicleLight的行为。
子状态机是一个状态机定义可以被多次复用的方式。它也需要将进入和离开迁移绑定到内部顶点上,这一点与封装组合状态类似。封装组合的场合,状态和它的内容被定义它们的状态机所包含,子状态机更像编程语言中的宏,而不是行为定义。
--UML2.5 14.2.3.4.7 Submachine States and submachines
(子状态机状态和子状态机)
在这个子状态机中,定义了四个状态:红灯,绿灯,绿灯倒计时,黄灯,每个状态的迁移都是通过对应的事件来驱动的。
在绿灯倒计时状态中,存在一个内部迁移用于接受计数值通知事件,实际的动作是调用DigitalVehicleLight的ShowCounter方法。
等处于红灯状态是,可以接受ShowDown事件以便迁移到ExitPoint。
从EntryPoint到Red的迁移有一个效应行为,动作出发LightReady信号。目的是用于同步表示设备和信号引擎的动作,具体动作将在后续文章中说明。
进入点/退出点
关于EntryPoint和ExitPoint的语义,UML2.5中定义如下。
进入点-进入点伪状态表示的是状态机或者封装了内部状态/状态机的组合状态的入口点。在包含入口点的状态机或者组合状态的每个区域中,最多可以有一个从入口点到区域内顶点的迁移。
退 出点-退出点伪状态表示的是状态机或者封装了内部状态/状态机的组合状态的退出点。迁移到组合状态或者是被子状态机状态引用的状态机中的区域中的退出点意 味着组合状态或者是子状态机状态的退出(伴随着关联退出行为的执行)。如果存在多个从状态机中的正交区域到这个伪状态的迁移,那么它的行为像汇合点伪状态 一样。
--UML2.5 14.2.3.7 Pseudostate and PseudostateKind
(伪状态和伪状态类型)
补充说明
子状态机中涉及的所有信号,都是作为状态机的一部分存在。也就是说都会随着DigitalVehicleLight的实例化一起被实例化,从而实现复用。
参考资料:
14.2 Behavior StateMachines (6) -Submachine States and submachines
14.2 Behavior StateMachines (7)--Pseudostate and PseudostateKind
14.2 Behavior StateMachines (10) --记法
打开方法如下:
-
进入【面向对象思考】 公众号
-
打开【UML】-【UML2.5中文译文】菜单
-
选择【状态图】分类
-
选择相关文章