3

鉴于此 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 答案是正确的,但我不确定。

提前谢谢 (;

4

1 回答 1

1

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

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

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

如果出于某种原因您确实需要在 LCA 或目标状态中发生转换操作,您可以使用“扩展状态”来实现结果。但在实践中,它真的没有必要。

于 2013-05-03T01:55:51.903 回答