谁能告诉我下面的两个模型(从UML超结构规范中取得的前两个模型)在语义上是否相同?
我希望将Fork和Join伪状态类添加到我的状态机库中,这似乎是我实现的有用方法。
这两个图不等同。
用两个首字母替换前叉是没有问题的:在上部状态机中,A1和B1同时激活,下部的激活也是如此。
但是,将两个最终状态替换为Join是有问题的。在大写的情况下,(Process,A2,B2)是Cleanup激活之前的最后一个状态配置。在每次运行中,在清理处于活动状态之前,Process,A2和B2处于活动状态。在小写的情况下,必须是活动的(过程,最终,最终)。
换句话说,(处理,A2,B2)和(清理)是大写的“邻居”状态配置,但它们不是小写的。中间有(过程,最终,最终)。
“语义等效”取决于您定义为语义相关的内容。对我来说,清理是否是下一步(过程,A2,B2)或下一步是否有所不同。
此外
在处理剩余之前,在大写字母A2和B2中必须同时处于活动状态。在小写字母中,没有这种需要。跟踪可以是......(过程,最终,B1),(过程,最终B2),(过程,最终,最终),然后是过程。
下图中的初始状态和最终状态不存在于上部。它们意味着在A1 / B1状态之前和A2 / B2状态之后的上图没有的附加行为,所以不,它们不是等效图。顶部图表示SETUP状态或transition事件负责fork和2个进程A和B的创建。底部图表示PROCESS负责创建2个进程。
我认为从你的实施角度来看,它们是一样的。这里的其他答案只是争论语义,但这就是你在问题中提出的问题。就产出而言,它们是相同的。初始伪状态不能具有触发器或保护,并且最终状态不能具有传出转换。除非两个区域都已完成,否则Process复合不能退出。因此,您的Process组合基本上接管了Fork和Join伪状态的角色。