UML 状态机 : Deep History Pseudostate and Final State

标签 uml state-machine

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

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

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

State Machine

最佳答案

从我对deepHistory描述的理解

This type of Pseudostate is a kind of variable that represents the most recent active state configuration of its owning Region. As explained above, a Transition terminating on this Pseudostate implies restoring the Region to that same state configuration, but with all the semantics of entering a State (see the Subclause describing State entry).

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

关于UML 状态机 : Deep History Pseudostate and Final State,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50099794/

相关文章:

javascript - 提供 UML 作为带有代码的文档是个好主意吗?

uml - UML 中的领域模型?

java - 如何以图形方式表示重写的方法

c# - 如何用c#写状态机?

c# - 状态机:确定下一个状态的多个条件?

oop - 在 UML 类图中,组合可以是双向的吗?

c# - 如何实现双向多对多关系的关联类?

ruby - 使用 state_machine,如何从 :if lambda 内部访问事件参数

c - 查找不可打印的字符并在 C 中打印出它们的十六进制形式

Java 到 HTML 解析器/状态机