3

在 UML 状态机中,如果进入子状态的最终状态,复合状态的历史究竟会发生什么?

考虑如下所示的状态机。在触发序列 T1-T2-T3-T4 之后,它将最终处于最终状态。通过进入最终状态,State21 区域的历史被清除,并且由于该区域也由此完成,将执行到 State1 的完成转换。现在,当触发器 T5 启用时,状态机进入深度历史状态。我假设在这种情况下,深度历史状态代表 State21,这意味着状态机进入 State21,然后执行从 State21 的初始伪状态到 State211 的转换。这个对吗?

我更喜欢上面描述的行为,但我可以看到另一种选择,其中当进入 State21 的最终状态时,State2 的历史也会被清除。在这种情况下,状态机执行从 State2 的初始伪状态到 State22 的转换。所以你怎么看?

状态机

4

2 回答 2

2

从我对deepHistory描述的理解

这种类型的 Pseudostate 是一种变量,表示其所属 Region 的最新活动状态配置。如上所述,终止于该伪状态的转换意味着将区域恢复到相同的状态配置,但具有进入状态的所有语义(参见描述状态进入的子条款)。

您的第一个行为描述似乎是好的。通过触发 T1、T2、T3、T4 和 T5 转换,您将返回到 State21 条目,即 State211。

于 2018-05-02T09:19:23.323 回答
1

我通过以下方式阅读此图:

在 State1 中,您可以通过调用 T1(这是一个新序列)或通过 T2(前一个序列的重试)进入 State2。

当应用程序/系统处于 State1 时,它似乎具有允许在某些情况下重试先前的 State2 序列的逻辑。由于如此深厚的历史将这些过程变量保留在父状态中,直到 State1 可以决定它想要继续的方式。

然而,示例状态机模型中存在歧义:

  1. 返回到 State1 的转换没有命名/编号,并且
  2. 尚未定义需要深入历史的中间部分完整状态。该模型需要一个退出状态/标准,定义为 State21 中的子状态,作为此未命名转换返回 State1 的源。

State21 中的当前流只有一个结束状态,因此每次都运行到完成。只有当您需要在给定的子状态位置重新进入状态时,深度历史才有意义。

于 2020-09-01T21:59:58.440 回答