Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UML活动图:输出上带有保护条件的fork_Uml_Activity Diagram - Fatal编程技术网

UML活动图:输出上带有保护条件的fork

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的第一次和第二次终止,它将连续执行两次。

我在活动图中遇到了守卫条件和fork的语义问题。假设终止操作A导致一个fork,fork的输出导致操作B和C(也就是说,这个fork有1个输入和2个输出)。如果A已成功终止,且B的保护条件有效,而C的保护条件无效,则整个活动是否将继续执行操作B并等待C的保护条件变为真,或者B和C都不会执行

<强>更新:考虑以下活动示例>/P>


假设A第一次终止时,C的保护条件无效,而B没有保护。在合并节点上,第二次执行。在A的第二次终止后,C的保护条件将永久有效,并且由于A的第一次和第二次终止,它将连续执行两次。这是否正确?

一旦
A
完成,它将出现一个令牌,叉将复制该令牌。一个令牌直接进入
B
,在完成后将
A重新触发到无穷大。现在,前往
C
的令牌会发生什么情况?他们只是在警卫处排队。当一段时间后打开防护时,它允许传递一个令牌(因为
C
只能保存一个令牌)。当
C
完成时,它将允许另一个令牌进入(如果同时有多个令牌到达),具体取决于守卫。基本上,
C
的启动次数与之前完成的
A
的启动次数相同

注意:您在“输出上的保护条件”问题中的暗示是错误的。防护始终位于动作的传入控制流上。叉子无法控制防护装置,而是动作。而且,一个动作永远不会有一个对输出的保护。这是由动作的行为控制的。当它终止时,它将在其传出控制流的每个上出现一个令牌(称为隐式fork)

对初始问题的回答保留为常见信息

实际上,当你画它的时候,情况很明显:


从顶部分叉出现的令牌将被阻止<代码>B
将在令牌通过保护后启动。因为
C
没有启动,下叉将挂起,因为它需要2个令牌。因此未达到
D
。除非
C
的防护装置在外部解锁。

谢谢您的回答。我在帖子中更新了一些进一步的数据,你能检查一下我的理解是否正确吗?你说的先决条件是什么意思?如果你指的是防护条件,那么它们应该在你的图表上可见。是的,没错。我更新了帖子,现在应该更清楚地说明这个问题了。