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
的守卫什么时候能对外解封
我在 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
的守卫什么时候能对外解封