如何用UML建模状态机行为继承与差异化事件处理逻辑?
UML状态机事件处理的标注方法
针对你描述的状态机需求,UML可以通过事件转发和终止事件传递这两个机制来实现,具体标注方式如下:
1. 子状态AA处理Event1的标注
当处于AA状态时,Event1需要被AA和父状态A同时处理。UML默认事件会从子状态向上传递,但如果子状态处理了事件就会终止传递,所以这里需要让AA在处理后主动转发事件给父层级:
- 在AA状态的内部转换中定义:
Event1 / AA:Event1; send(Event1)- 前半部分
AA:Event1是AA自身对Event1的处理动作; - 后半部分
send(Event1)是显式把Event1转发给父状态A,这样A就能捕获并处理该事件。
- 前半部分
2. 子状态AB处理Event1的标注
处于AB状态时,Event1仅由AB处理,不需要传递给父状态A。只需在AB状态的内部转换中直接定义处理动作,不添加转发即可:
- 内部转换标注为:
Event1 / AB:Event1
此时AB处理完Event1后,事件传递链会自动终止,父状态A不会收到该事件。
3. 状态转换的标注
- 状态机启动后,从初始节点(实心圆)指向复合状态A,A的初始子状态设为AA(用带箭头的虚线从A内部的初始点指向AA);
- 从AA到AB的转换箭头标注触发事件
Event2,表示收到Event2后从AA切换到AB。
对应的行为验证和你给出的预期一致:
A AA -> Event1 AA:Event1 A:Event1 -> Event2 AB -> Event1 AB:Event1
内容的提问来源于stack exchange,提问作者Patrick Wright
相关产品推荐
相关产品推荐

