您的位置:首页 > 其它

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

2017-10-17 19:42 197 查看
在为昨天的文章写说明的时候,发现状态图中有错误,所以今天的文章就从纠错开始。需求不变。

背景

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

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

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

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

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

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

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



追加处理说明

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

从状态图的角度来看,就是系统收到了一个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) --记法

打开方法如下:

进入【面向对象思考】 公众号  

打开【UML】-【UML2.5中文译文】菜单

选择【状态图】分类

选择相关文章

以上就是今天的文章,欢迎点赞,关注并推荐给您的朋友!
阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  EA UML 状态图