这篇文章将为大家详细讲解有关EA画UML状态图中如何实现延缓事件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
新需求
我们将信号系统的需求稍微修改一下,假设这个系统是按钮式信号系统,一个方向是车辆通行,一个方向是行人横穿马路时使用的。需求如下:
基本需求
系统启动阶段,车辆方向,行人方向都处于停止状态(双方向红灯)。且不接受任何操作。
车辆方向通行,行人方向停止(车辆方向绿灯,行人方向红灯)
行人按下通行请求按钮。
车辆方向停止准备,行人方向停止(车辆方向黄灯,行人方向红灯)
车辆方向停止,行人方向通行(车辆方向红灯,行人方向绿灯)
车辆方向停止,行人方向停止准备(车辆方向红灯,行人方向黄灯)
回到第2步,循环往复
补充事项:
如果车辆方向通行时间小于最小通行时间,车辆方向继续通行,直至达到最小通行时间以后进入停止准备状态。
如果车辆方向通行时间已经超过最小通行时间,则直接进入停止准备状态。
行人通行状态下,按钮无效。
行人停止准备状态,停止状态,按钮有效
新设计
考虑上述需求,对状态图进行修改,主要是增加个一个VehicleWaitSwtich状态。修改后的状态图如下:
说明
忽略横穿请求按钮
当系统处于Setup,VehicleStopSafely,PedestrianGo这三个状态时,即使用户按下横穿请求按钮,请求也会被忽略。这里遵循以下原则:
当一个事件发生被检测并发送,它可能导致一个或多个有效的迁移被触发。如果没有迁移处于有效状态而且相应的事件类型不在活动状态构成的任何一个可延期触发条件列表中,发送的事件发生被抛弃,该执行到完成步骤结束而不做任何事情。
--UML2.5 14.2.3.9.1 The run-to-completion paradigm(执行到完成样式)
延缓处理横穿请求按钮
当系统处于PedestrianFinishCrossing,VehicleGo这两个状态时,如果用户按下横穿请求按钮,这个事件即不会被处理,也会被忽略。表示方法参见上图中红框内的部分。这里遵循以下原则:
状态可以定义一套在该状态中被延缓(处理)的事件类型。这意味着只要状态维持活动,那些类型的事件就不会被发送(处理),直到一个延缓事件被明确地用在了以延缓状态(一种覆盖选项)为源的迁移的触发条件中。
--UML2.5 14.2.3.4.3 State entry, exit, and doActivity Behaviors(状态进入,离开和doActivity行为)
处理横穿请求按钮
当系统处于VehicleWaitSwitch状态时,如果用户按下横穿请求按钮,或者存在被延缓处理的横穿请求事件,都会导致迁移到VechiStopSafely状态。
EA中延缓(处理)事件的设定方法
像添加进入/退出行为那样,打开Operations设定对话框,在Action列输入时间名称,在Name列输入【defer】关键字即可。
关于“EA画UML状态图中如何实现延缓事件”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。