Uml 活动图控制流

Uml 活动图控制流,uml,Uml,我在互联网上找到了以下活动图: 我不明白为什么从接收订单操作中有两个控制流(到发货订单和账单客户)。它们是平行的吗?那为什么没有叉子呢。如何理解这个图表?请解释一下。这只是一个糟糕的例子 从上下文判断,应该有一个fork来表示发货订单和账单客户应该同时发生 然后在发送确认之前应该有一个连接,以指示在执行发送确认之前两个流都应该已经完成 这是非常有效的UML2。第一个操作不需要令牌,因此可以立即启动。当第一个动作完成时,它向另外两个动作提供令牌,它们可以开始。在提供所有必需的令牌之前,最后一个操

我在互联网上找到了以下活动图:


我不明白为什么从接收订单操作中有两个控制流(到发货订单和账单客户)。它们是平行的吗?那为什么没有叉子呢。如何理解这个图表?请解释一下。

这只是一个糟糕的例子

从上下文判断,应该有一个fork来表示
发货订单
账单客户
应该同时发生


然后在
发送确认
之前应该有一个连接,以指示在执行
发送确认
之前两个流都应该已经完成

这是非常有效的UML2。第一个操作不需要令牌,因此可以立即启动。当第一个动作完成时,它向另外两个动作提供令牌,它们可以开始。在提供所有必需的令牌之前,最后一个操作无法启动。完成最后一个操作后,包含的活动也将完成

福克斯只是复制代币。连接只是合并标记。因此,叉和连接通常是不必要的


请看

我没有检查这是否是对UML规范的最新修订,但当前(第15.2.3.2章)说明(重点由我自己确定):

由于ActivityNode可能是多个ActivityEdge的源,因此可以向多个目标提供相同的令牌。但是,同一标记一次只能在一个目标上被接受(除非复制,因此它不是同一标记,见第15.3款中的ForkNodes和第15.5款中的ExecutableNodes)。如果一个令牌同时提供给多个ActivityNodes,最多只能被其中一个接受,但具体哪一个并不完全由Activity flow语义决定。这意味着发生不确定性的活动模型可能会受到时间问题和竞争条件的影响。建模人员有责任在构建活动模型时避免此类条件(如果不需要)


从这个角度来看,我认为@Jim L.的答案可能不受欢迎。我假设,至少在当前版本的UML中,所讨论的图表没有反映建模者的意图。现在看来,叉子不仅是干净的方法,而且是唯一正确的方法。

谢谢你的回答。我也这么想,但有一件事让我困惑,那就是这本书出自拉姆堡的《UML参考》,拉姆堡是UML的创造者之一。甚至教皇也可能会犯错。但他永远不会承认。正如Geert所说:一个非常糟糕的例子。与其说它是一个错误,不如说它是一个有效的UML,只是一个选择不当的例子。我认为它是错误的。吉姆的回答中有我的评论。@Thomas:这没有错。请在我的回答下面看到我对你评论的回应。谢谢你的回答。若我理解,令牌是在对象之间传递的一些数据。您是如何理解存在令牌的?数据令牌不同于控制令牌。UML规范描述了活动如何使用令牌工作。我就是这样知道的。康拉德·博克的文章更清楚地解释了这一切,这是不可能的。当一个活动结束时,它会提供所有的控制令牌。此外,发货订单确实需要一个控制令牌来启动。现在我在笔记本电脑上,我找到了康拉德系列的第一个链接,并将其添加到我的答案中。我强烈建议任何使用UML2活动图的人阅读这些文章。你是对的。我强调了那个重要的句子。我想这在第一次提出这个问题时就已经存在了。同一部分:“在执行时,ExecutableNode被视为持有一个指示它正在执行的控制令牌。当它完成执行时,它在所有传出的控制流上提供控制令牌。ExecutableNode的所有传入和传出ActivityEdge都必须是控制流。”(强调)@JimL。但这完全取决于我的重点。只有一个令牌会被接受,因此机器会阻止…@qwerty__so:多个令牌中的每一个都只能被一个活动节点接受。@JimL。嗯,我不是以英语为母语的人。但最多其中一个对我来说意味着:一旦一个被接受,其他令牌就不会被接受。而且在文本中,但究竟哪一个不是完全确定的,就解决了这个问题。