【问题标题】:UML state charts: completion transitionsUML 状态图:完成转换
【发布时间】:2016-02-28 17:50:29
【问题描述】:
在具有运行到完成模型的 UML 状态图的上下文中,“完成转换”是如何处理的?
- 状态的完成会在事件队列的开头插入一个“完成事件”,因此只有在状态机显式步进后才会执行“完成转换”,或者
- 状态的完成会立即触发“完成转换”(可能还有后续的“完成转换”),因此状态机可以为每个显式步进执行多个步骤。
这两种情况都表明,一个状态的未受保护的“完成转换”实际上使任何其他已定义的转换(无论是事件触发的还是受保护的)都是多余的。
我理解正确吗?
【问题讨论】:
标签:
uml
state-machine
statechart
boost-statechart
【解决方案1】:
答案更接近于 #2(“完成一个状态会立即触发“完成转换””),但是您随后提到了“每个显式步进的多个步骤”。我不明白你的意思。
UML 2.5 规范在第 14.2.38.3 节中说:
一种特殊的转换是完成转换,它有一个隐式触发器。启用此触发器的事件
被称为完成事件,它表示与完成的源状态相关的所有行为
过渡已完成执行。在简单状态的情况下,当关联条目时生成完成事件
并且 doActivity 行为已完成执行。如果未定义此类行为,则生成完成事件
进入该州后。
规范继续描述如何为复合或子机器状态生成完成事件。既然你问的是这个更简单的案例,那我就跳过了。
规范还说“完成事件具有调度优先级。也就是说,它们在任何未决事件发生之前调度
事件池。”因此,不会调度其他定义的转换。