0
点赞
收藏
分享

微信扫一扫

EA&UML日拱一卒-状态图::延缓(处理)事件


新需求

我们将信号系统的需求稍微修改一下,假设这个系统是按钮式信号系统,一个方向是车辆通行,一个方向是行人横穿马路时使用的。需求如下:

基本需求

  1. 系统启动阶段,车辆方向,行人方向都处于停止状态(双方向红灯)。且不接受任何操作。
  2. 车辆方向通行,行人方向停止(车辆方向绿灯,行人方向红灯)
  3. 行人按下通行请求按钮。
  4. 车辆方向停止准备,行人方向停止(车辆方向黄灯,行人方向红灯)
  5. 车辆方向停止,行人方向通行(车辆方向红灯,行人方向绿灯)
  6. 车辆方向停止,行人方向停止准备(车辆方向红灯,行人方向黄灯)
  7. 回到第2步,循环往复


补充事项:


  1. 如果车辆方向通行时间小于最小通行时间,车辆方向继续通行,直至达到最小通行时间以后进入停止准备状态。
  2. 如果车辆方向通行时间已经超过最小通行时间,则直接进入停止准备状态。
  3. 行人通行状态下,按钮无效。
  4. 行人停止准备状态,停止状态,按钮有效

新设计


考虑上述需求,对状态图进行修改,主要是增加个一个VehicleWaitSwtich状态。修改后的状态图如下:


EA&UML日拱一卒-状态图::延缓(处理)事件_UML

说明

忽略横穿请求按钮

当系统处于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日拱一卒-状态图::延缓(处理)事件_EA_02

参考资料:

14.2 Behavior StateMachines (3) --延缓(处理)事件

14.2 Behavior StateMachines (10) --记法

打开方法如下:

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



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



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




EA&UML日拱一卒-状态图::延缓(处理)事件_面向对象_03




举报

相关推荐

0 条评论