在UML状态机中,如果输入子状态的最终状态,复合状态的历史记录究竟会发生什么?
考虑下面显示的状态机。在触发序列T1-T2-T3-T4之后,它将以最终状态结束。通过进入最终状态,State21区域的历史被清除,并且由于该区域也由此完成,因此将执行到State1的完成转换。现在,当启用触发器T5时,状态机进入深度历史状态。我想在这种情况下,深度历史状态代表State21,这意味着状态机进入State21然后执行从State21的初始伪状态到状态211的转换。这是对的吗?
我更喜欢上面描述的行为,但我可以看到一个替代方案,当输入State21中的最终状态时,State2的历史记录也会被清除。在这种情况下,状态机执行从State2的初始伪状态到状态22的转换。你觉得怎么样?
答案 0 :(得分:1)
从我对深刻的历史描述的理解
这种类型的伪状态是一种变量,代表其拥有区域的最新活动状态配置。如上所述,终止于此Pseudostate的转换意味着将Region恢复为相同的状态配置,但具有进入状态的所有语义(请参阅描述State条目的子条款)。
你的第一个行为描述似乎是好的。通过触发T1,T2,T3,T4和T5转换,您将返回State21条目,即State211。
答案 1 :(得分:1)
我通过以下方式阅读此图:
在State1中,您可以通过调用T1(这是一个新序列)或通过T2(重试上一个序列)进入State2。
当应用程序/系统处于State1时,它似乎具有逻辑,该逻辑允许在某些情况下重试先前的State2序列。如此深厚的历史将这些过程变量保留在父状态中,直到State1可以决定要继续哪种方式。
但是示例状态机模型中存在歧义:
State21中的电流只有一个结束状态,因此每次都运行到完成状态。只有当您需要在给定的子状态位置重新输入状态时,深层历史才有意义。