0
点赞
收藏
分享

微信扫一扫

EA&UML日拱一卒-状态图::内部迁移


在为昨天的文章写说明的时候,发现状态图中有错误,所以今天的文章就从纠错开始。需求不变。


背景

还是先回到交通信号系统的例子,编程也好,设计也好,都讲究一个对称,交通信号系统有启动过程,同样也应该有停止过程。需求大致如下:

  1. 操作者通过操作停止按钮关闭系统
  2. 如果系统处于准备状态(双方向红灯),则直接关闭。
  3. 如果某个方向处于通行状态(绿灯),则切换成安全停止状态(黄灯),安全停止时间经过以后,系统关闭。
  4. 如果正处于安全停止状态(黄灯),安全停止时间(不需要重新开始计时)经过以后,系统关闭。
  5. 任何一种情况,断电之前系统必须处于双方向红灯状态。

加入了停止过程之后,交通信号系统的状态图变成下面这个样子。为了说明方便,状态图中的相关要素进行了着色处理。


EA&UML日拱一卒-状态图::内部迁移_sed


追加处理说明


操作者通过操作停止按钮关闭系统

从状态图的角度来看,就是系统收到了一个ShutDownSwitchPressed事件。

如果系统处于准备状态(双方向红灯),则直接关闭。

因为双方向信号已经都是红灯,所以系统可以直接停止。从状态图来说就是Idle状态中如果发生ShutDownSwitchPressed事件,直接迁移到完了状态。参见图中的红色迁移。

如果某个方向处于通行状态(绿灯),则切换成安全停止状态(黄灯),安全停止时间经过以后,系统关闭。


如 果系统处于Road1Go状态时发生了ShutDownSwitchPressed事件,那么不等Road1GoTimeout发生,系统就会从 Road1Go状态迁移到Road1StopSafely状态(蓝色迁移线)。与此同时,作为ShutDownSwitchPressed迁移的效应行 为,ShutingDown标志被设为true(蓝框内处理)。

Road1StopSafely状态的处理正常进行,等 Road1StopSafelyTimeout事件发生以后系统离开Road1StopSafely(粉色迁移),遇到choice伪状态,对 ShutingDown的状态进行判断,如果结果为true,则迁移到完了状态(绿色迁移)。

如果正处于安全停止状态(黄灯),安全停止时间(不需要重新开始计时)经过以后,系统关闭。

如果这时发生了,ShutDownSwitchPressed事件,则系统发生一次内部迁移,状态的进入行为和退出行为都不会被执行,只是执行内部迁移的效应行为,ShutingDown标志被设为true(粉色框内处理)。

Road1StopSafely 状态的处理正常进行,等Road1StopSafelyTimeout事件发生以后系统离开Road1StopSafely(粉色迁移),遇到 choice伪状态,对ShutingDown的状态进行判断,如果结果为true,则迁移到完了状态(绿色迁移)。

任何一种情况,断电之前系统必须处于双方向红灯状态。


Road1StopSafely状态的退出行为将Road1方向的信号设定为红色,可以保证两个方向的信号均为红色。

参考资料:

14.2 Behavior StateMachines (8)--内部迁移

14.2 Behavior StateMachines (10) --记法


打开方法如下:

  1. 进入【面向对象思考】 公众号
  2. 打开【UML】-【UML2.5中文译文】菜单
  3. 选择【状态图】分类
  4. 选择相关文章



以上就是今天的文章,欢迎点赞,关注并推荐给您的朋友!



阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】



EA&UML日拱一卒-状态图::内部迁移_EA_02




举报

相关推荐

0 条评论