1

在具有运行到完成模型的 UML 状态图的上下文中,如何处理“完成转换”?

  1. 状态的完成会在事件队列的开头插入一个“完成事件”,因此只有在状态机显式步进时才执行“完成转换”,或者
  2. 状态的完成立即触发“完成转换”(以及可能的后续“完成转换”),因此状态机可以为每个显式步进执行多个步骤。

这两种情况都表明,一个状态的未受保护的“完成转换”有效地使任何其他定义的转换(无论是事件触发的还是受保护的)都是多余的。

我是否正确理解这一点?

4

1 回答 1

2

答案更接近于#2(“状态的完成立即触发“完成转换”),但您随后提到了“每个显式步进的多个步骤”。我不知道你那是什么意思。

UML 2.5 规范在第 14.2.38.3 节中说:

一种特殊的转换是完成转换,它有一个隐式触发器。启用此触发器的事件称为完成事件,它表示与完成转换的源状态关联的所有行为都已完成执行。在简单状态的情况下,当关联的条目和 doActivity 行为完成执行时会生成完成事件。如果未定义此类行为,则在进入状态时生成完成事件。

该规范继续描述如何为复合或子机器状态生成完成事件。既然你问的是这个更简单的案例,我会跳过它。

规范还说“完成事件具有调度优先级。也就是说,它们在事件池中的任何未决事件发生之前被调度。” 因此,不会调度其他定义的转换。

于 2016-02-28T18:39:04.713 回答