UML activity 图:输出上带有保护条件的分支

UML activity diagram: fork with guard conditions on the outputs

我在 activity 图中遇到了保护条件和分叉的语义问题。假设终止动作 A 导致分叉,分叉的输出导致动作 B 和 C(即,该分叉有 1 个输入和 2 个输出)。如果A成功终止,B的守卫条件成立,C的守卫条件不成立,整个activity会继续动作B,等待C的守卫条件变为真,还是B和C都不会被处决?

更新:考虑以下 activity 示例

假设A第一次终止,C的守卫条件无效,而B没有守卫。沿着合并节点,A被第二次执行。 A第二次终止后,C的guard condition永远有效,由于A的第一次和第二次终止,C会连续执行两次,对吗?

一旦 A 完成,它将出现一个令牌,并且分叉将复制它。一个令牌直接进入 B,在完成后重新触发 A 到无穷大。现在,前往 C 的代币会怎样?他们只是在警卫处排队。当守卫在一段时间后打开时,它允许传递一个令牌(因为 C 只能容纳一个令牌)。当 C 完成时,它将允许另一个令牌进入(如果同时有多个令牌到达),这取决于守卫。基本上 C 可以开始的次数与 A 之前完成的次数相同。

N.B。你在问题 "guard conditions on the outputs" 中的含义是错误的。守卫总是在一个动作的传入控制流上。叉子不会控制守卫,这是行动。此外,一个动作永远不会对输出进行保护。这是由动作的行为控制的。当它终止时,它将在其传出控制流的 each 上出现一个令牌(所谓的隐式分叉)。

初始问题的答案作为公共信息留下

其实你画的时候,情况就很明显了:

从顶部分叉中出现的令牌将被阻止。 B 将在令牌通过守卫后开始。因为 C 没有启动,下叉将挂起,因为它需要 2 个令牌。所以 D 没有达到。除非C的守卫什么时候能对外解封