Ship order
和Bill customer
应该同时进行。Send confirmation
之前应该有一个Join,以表示在执行Send confirmation
之前,两个流程都已经完成。这是完全有效的UML 2。第一个动作不需要令牌,因此它可以立即开始。当第一个动作完成时,它向另外两个动作提供令牌,它们也可以开始。最后一个动作只有在所有必需的令牌都被提供后才能开始。当最后一个动作完成时,包含该活动的活动也完成了。
分支只是复制令牌。合并只是合并令牌。因此,分支和合并通常是不必要的。
我没有检查这是否是 UML 规范的最新修订,但目前的2.5 版本(第 15.2.3.2 章)说明如下(强调是我自己设置的):
从那个角度来看,我会认为@Jim L.的回答可能已经过时了。我认为,至少在当前版本的UML中,所讨论的图示并不反映建模者的意图。现在似乎分支不仅是清晰的方式,而且是唯一正确的方式。由于 ActivityNode 可以是多个 ActivityEdge 的源,因此同一令牌可以提供给多个目标。但是,同一令牌只能在一个目标上被接受(除非它被复制,此时它不是同一令牌,请参见子条款 15.3 中的 ForkNodes 和子条款 15.5 中的 ExecutableNodes)。如果一个令牌同时提供给多个 ActivityNode,则最多只能由其中一个接受,但确切是哪一个并不完全由 Activity 流语义确定。这意味着在发生非确定性的 Activity 模型中可能存在时间问题和竞争条件。如果不需要这些条件,则模型师有责任在构建 Activity 模型时避免这种情况。