UML活动图:输出上带有保护条件的fork
我在活动图中遇到了守卫条件和fork的语义问题。假设终止操作A导致一个fork,fork的输出导致操作B和C(也就是说,这个fork有1个输入和2个输出)。如果A已成功终止,且B的保护条件有效,而C的保护条件无效,则整个活动是否将继续执行操作B并等待C的保护条件变为真,或者B和C都不会执行UML活动图:输出上带有保护条件的fork,uml,activity-diagram,Uml,Activity Diagram,我在活动图中遇到了守卫条件和fork的语义问题。假设终止操作A导致一个fork,fork的输出导致操作B和C(也就是说,这个fork有1个输入和2个输出)。如果A已成功终止,且B的保护条件有效,而C的保护条件无效,则整个活动是否将继续执行操作B并等待C的保护条件变为真,或者B和C都不会执行 更新:考虑以下活动示例>/P> 假设A第一次终止时,C的保护条件无效,而B没有保护。在合并节点上,第二次执行。在A的第二次终止后,C的保护条件将永久有效,并且由于A的第一次和第二次终止,它将连续执行两次。
<强>更新:考虑以下活动示例>/P>
假设A第一次终止时,C的保护条件无效,而B没有保护。在合并节点上,第二次执行。在A的第二次终止后,C的保护条件将永久有效,并且由于A的第一次和第二次终止,它将连续执行两次。这是否正确?一旦
A
完成,它将出现一个令牌,叉将复制该令牌。一个令牌直接进入B
,在完成后将A重新触发到无穷大。现在,前往C
的令牌会发生什么情况?他们只是在警卫处排队。当一段时间后打开防护时,它允许传递一个令牌(因为C
只能保存一个令牌)。当C
完成时,它将允许另一个令牌进入(如果同时有多个令牌到达),具体取决于守卫。基本上,C
的启动次数与之前完成的A
的启动次数相同
注意:您在“输出上的保护条件”问题中的暗示是错误的。防护始终位于动作的传入控制流上。叉子无法控制防护装置,而是动作。而且,一个动作永远不会有一个对输出的保护。这是由动作的行为控制的。当它终止时,它将在其传出控制流的每个上出现一个令牌(称为隐式fork)
对初始问题的回答保留为常见信息
实际上,当你画它的时候,情况很明显:
从顶部分叉出现的令牌将被阻止<代码>B
将在令牌通过保护后启动。因为C
没有启动,下叉将挂起,因为它需要2个令牌。因此未达到D
。除非C
的防护装置在外部解锁。谢谢您的回答。我在帖子中更新了一些进一步的数据,你能检查一下我的理解是否正确吗?你说的先决条件是什么意思?如果你指的是防护条件,那么它们应该在你的图表上可见。是的,没错。我更新了帖子,现在应该更清楚地说明这个问题了。