何时应该在分层状态机上执行转换操作?

时间:2013-03-24 22:28:31

标签: uml modeling state-machine

鉴于这个HSM示例模型 - http://www.embedded.com/design/system-integration/4008251/8/A-crash-course-in-UML-state-machines-Part-2 - 我想知道执行转换操作的正确时刻应该是什么。假设该机器处于其初始状态S211并且调度事件G(S21-> S1) - 假设该事件有一些动作。顺序应该是这样的:

退出到最不常见的祖先(S) - 转换操作 - 进入目标状态(S1) - 目标的初始化动作...

或者可能是这样的:

退出到转换的源状态(S21) - 转换操作 - 退出到最不常见的祖先(S) - 进入目标状态(S1) - 目标的初始化动作

简而言之 - 是与“过渡之源”或“最不共同的祖先”相关的过渡行动?

维基百科上描述的例子太过微不足道了,无法提供这些细节...... UML规范似乎暗示LCA答案是正确的,但我不确定。

提前(;

1 个答案:

答案 0 :(得分:1)

自动机理论表明,动作不会在源或目标中发生。但自动机理论通常也不考虑等级状态。所以,是的,LCA与过渡行动的理论假设一样好。

然而,Miro Samek(QHSM)设计的状态机代码实际上在源状态内执行转换操作。请理解,这不是问题或缺陷。

就任何特定实施而言,重要的是转换行动以一致的方式发生。 Miro的代码就是这种情况。

如果由于某种原因你真的需要在LCA或目标状态下发生过渡动作,你可以使用"扩展状态"实现结果。但在实践中,它确实没有必要。