UML状态机:深度历史假状态和最终状态

时间:2018-04-30 11:40:35

标签: uml state-machine

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

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

我更喜欢上面描述的行为,但我可以看到一个替代方案,当输入State21中的最终状态时,State2的历史记录也会被清除。在这种情况下,状态机执行从State2的初始伪状态到状态22的转换。你觉得怎么样?

State Machine

2 个答案:

答案 0 :(得分:1)

从我对深刻的历史描述的理解

  

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

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

答案 1 :(得分:1)

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

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

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

但是示例状态机模型中存在歧义:

  1. 返回状态1的过渡未命名/编号,并且
  2. 尚未定义需要较深历史记录的中间部分完整状态。该模型需要一个退出状态/条件,该状态/条件被定义为State21中的子状态,该状态充当此未命名的过渡回State1的源。

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