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 (10) --记法
打开方法如下:
进入【面向对象思考】 公众号
打开【UML】-【UML2.5中文译文】菜单
选择【状态图】分类
选择相关文章
以上就是今天的文章,欢迎点赞,关注并推荐给您的朋友!
阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】
背景
还是先回到交通信号系统的例子,编程也好,设计也好,都讲究一个对称,交通信号系统有启动过程,同样也应该有停止过程。需求大致如下:
操作者通过操作停止按钮关闭系统
如果系统处于准备状态(双方向红灯),则直接关闭。
如果某个方向处于通行状态(绿灯),则切换成安全停止状态(黄灯),安全停止时间经过以后,系统关闭。
如果正处于安全停止状态(黄灯),安全停止时间(不需要重新开始计时)经过以后,系统关闭。
任何一种情况,断电之前系统必须处于双方向红灯状态。
加入了停止过程之后,交通信号系统的状态图变成下面这个样子。为了说明方便,状态图中的相关要素进行了着色处理。
追加处理说明
操作者通过操作停止按钮关闭系统
从状态图的角度来看,就是系统收到了一个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日拱一卒-状态图::迁移
- EA&UML日拱一卒-状态图::基本要素画法
- EA&UML日拱一卒-状态图::延缓(处理)事件
- EA&UML日拱一卒-状态图::子状态机
- EA&UML日拱一卒-状态图::状态
- EA&UML日拱一卒-状态图::状态机之间的同步
- EA&UML日拱一卒-状态图::开篇
- EA&UML日拱一卒-活动图::14.2.3.4 States(状态)(1)
- EA&UML日拱一卒-活动图::14.2.3.4 States(状态)(3)
- EA&UML日拱一卒-状态图::庖丁解牛
- EA&UML日拱一卒--序列图(Sequence Diagram)::状态不变量
- EA&UML日拱一卒-状态图::面向对象的另一种理解
- EA&UML日拱一卒-活动图::14.2.3.4 States(状态)(2)
- EA&UML日拱一卒-状态图::重画按钮状态图
- EA&UML日拱一卒-状态图::延缓事件
- EA&UML日拱一卒-状态图::不是模式的模式
- EA&UML日拱一卒-状态图::这还不算完
- EA&UML日拱一卒-状态图::状态机
- EA&UML日拱一卒-微信小程序实战:位置闹铃 (2)-在地图上显示自己的位置
- EA&UML日拱一卒-多任务编程超入门-(13)启动和终止进程