UML状态机中Fork和Join的语义

UML状态机中Fork和Join的语义,uml,state-machine,Uml,State Machine,有人能告诉我下面的两个模型(最上面的一个取自UML上层结构规范)在语义上是否等价吗? 我希望将Fork和Join伪状态类型添加到我的状态机库中,这似乎是一种有用的实现方式。下图中的初始状态和最终状态在上图中不存在。它们暗示了A1/B1状态之前和A2/B2状态之后的其他行为,而上面的图没有这些行为,所以它们不是等价图。上图表示设置状态或转换事件负责fork和2个进程(A和B)的创建。下图表示该进程负责创建2个进程。这两个图并不等效 用两个首字母替换fork是没有问题的:在上面的状态机中,A1和B

有人能告诉我下面的两个模型(最上面的一个取自UML上层结构规范)在语义上是否等价吗?


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

下图中的初始状态和最终状态在上图中不存在。它们暗示了A1/B1状态之前和A2/B2状态之后的其他行为,而上面的图没有这些行为,所以它们不是等价图。上图表示设置状态或转换事件负责fork和2个进程(A和B)的创建。下图表示该进程负责创建2个进程。

这两个图并不等效

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

但是,用两个最终状态替换连接是有问题的。在上例中,(进程A2,B2)是清除激活之前的最后一个状态配置。在每次运行中,在“清理”处于活动状态之前,进程A2和B2处于活动状态。在小写情况下,必须激活(流程、最终、最终)

换句话说,(进程,A2,B2)和(清除)是大写的“相邻”状态配置,但它们不在小写中。中间有(过程、最终、最终)

“语义等价”取决于您定义的语义相关。对我来说,清理是(流程,A2,B2)之后的下一步还是下一步都很重要

此外


在上例中,A2和B2必须同时处于激活状态,然后才能离开流程。在较低的情况下,没有这种需要。痕迹可能是。。。(流程,最终,B1),(流程,最终B2),(流程,最终,最终),然后流程就剩下了。

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

因为伪状态和最终状态都不能有进入或退出行为,“附加行为”从何而来?好问题。对我来说,它们意味着创造和删除。我的问题应该读语义对等。。。我对你有点好奇。下图中退出流程的“更多可能性”;要退出流程,在完成到清理的过渡之前,两个区域肯定都需要处于最终状态?感谢gefi-理解(我现在有一个计划,将工作并将流程(A2,B2)保留为最后状态…@DMM此外,在上例中,A2和B2必须在流程离开之前同时处于活动状态。在较低的情况下,没有这种需要。痕迹可能是。。。(过程,最终,B1),(过程,最终B2),(过程,最终,最终),然后剩下过程。