UML状态机中Fork和Join的语义

时间:2014-04-09 21:58:52

标签: uml state-machine

有人能告诉我下面的两个模型(从UML超结构规范中取得的前两个模型)在语义上是否相同? Fork & Join versus entering parent state

我希望将Fork和Join伪状态类添加到我的状态机库中,这似乎是我实现的有用方法。

3 个答案:

答案 0 :(得分:1)

这两个图不等同。

用两个首字母替换前叉是没有问题的:在上部状态机中,A1和B1同时激活,下面的那个也是如此。

但是,将两个最终状态替换为Join是有问题的。在大写的情况下,(Process,A2,B2)是Cleanup激活之前的最后一个状态配置。在每次运行中,在清理处于活动状态之前,Process,A2和B2处于活动状态。在小写的情况下,它必须是(过程,最终,最终)。

换句话说,(Process,A2,B2)和(Cleanup)是大写的“邻居”状态配置,但它们不是小写的。中间有(过程,最终,最终)。

“语义等效”取决于您定义为语义相关的内容。对我来说,清理是否是下一步(过程,A2,B2)或下一步是否有所不同。

<强>此外

在处理剩余之前,在大写字母A2和B2中的

必须同时处于活动状态。在小写字母中,没有这种需要。跟踪可能是......(流程,最终,B1),(流程,最终B2),(流程,最终,最终),然后是流程。

答案 1 :(得分:0)

下图中的初始状态和最终状态不存在于上部。它们意味着在A1 / B1状态之前和A2 / B2状态之后的上图没有的附加行为,所以不,它们不是等效图。顶部图表示SETUP状态或transition事件负责fork和2个进程A和B的创建。底部图表示PROCESS负责创建2个进程。

答案 2 :(得分:0)

我认为从你的实施角度来看,它们是一样的。这里的其他答案只是争论语义,但这就是你在问题中提出的问题。 就产出而言,它们是相同的。初始伪状态不能具有触发器或保护,并且最终状态不能具有传出转换。除非两个区域都已完成,否则Process复合不能退出。因此,您的Process组合基本上接管了Fork和Join伪状态的角色。