Uml 在活动图中,两个流是否可以执行相同的操作?

Uml 在活动图中,两个流是否可以执行相同的操作?,uml,activity-diagram,Uml,Activity Diagram,我有两个流指向同一个动作。操作是付款。一个流程用于租金,另一个流程用于购买。在这两种情况下,客户都必须付费。我想对这两个流使用一个支付操作。或者我应该使用合并节点,然后将输出连接到付款操作。我不确定是否可以使用合并节点,因为这两个流彼此独立。我上传了一张照片 这一次让我措手不及。当一个状态/动作中有多个无防护的转换时,会发出一个隐式fork,这样多个令牌就会独立地离开和移动。第401页: 当ExecutableNode完成执行时,表示该执行的控制令牌将从ExecutableNode中删除,并且在

我有两个流指向同一个动作。操作是
付款
。一个流程用于
租金
,另一个流程用于
购买
。在这两种情况下,客户都必须付费。我想对这两个流使用一个
支付
操作。或者我应该使用合并节点,然后将输出连接到
付款
操作。我不确定是否可以使用合并节点,因为这两个流彼此独立。我上传了一张照片


这一次让我措手不及。当一个状态/动作中有多个无防护的转换时,会发出一个隐式fork,这样多个令牌就会独立地离开和移动。第401页:

当ExecutableNode完成执行时,表示该执行的控制令牌将从ExecutableNode中删除,并且在ExecutableNode的所有传出控制流上提供控制令牌。也就是说,从ExecutableNode到其传出ControlFlows的控制流有一个隐式分支

我似乎记得,类似地,两个传入的转换意味着它们都必须传递一个令牌。阅读第页(上)。401:

在所有传入控制流(如果有)提供令牌之前,ExecutableNode不得执行。也就是说,传入控制流上存在隐式连接。特定类型的可执行节点可能具有附加的先决条件,在节点可以执行之前必须满足这些先决条件

现在当你看p。你找到了吗

合并节点是将多个备用流合并在一起的控制节点。它不用于同步并发流,而是接受多个备用流中的一个

给你。您需要事先合并以使其正确


注意:如果你是非正式的建模(所以在某个有文档记录的领域),你可以接受你的符号,因为它经常被使用。理论与实践。。。不过,不建议这样做。

只是为了补充托马斯·基利安的答案

你能做那样的模特吗?对但这将意味着隐式连接,因此两个流都必须完成,才能启动makepayment操作。这是允许的,但不是你想要实现的

在你的情况下你能这样做吗?不会。这将有一个不同于您想要实现的行为(加入而不是合并)

您能否在活动之前使用合并节点以获得预期结果?是的,当我们只想在一个传入流完成时继续合并流时,这是绝对正确和首选的方法。流量单独触发的事实并不构成问题


没有合并节点,您能实现同样的效果吗?可以,您可以使用参数和参数集。可以使用一个参数,到达该参数的流将创建隐式合并。另外,如果定义了参数集,则当仅为一个参数集的所有参数提供令牌时,操作开始,但这意味着不同的参数集通过不同的流传递。然而,只有当您要传递一些参数时,使用参数的方法才可能。此外,这将更难理解,因此在你真正了解自己在做什么之前,我不鼓励这种做法。

这确实是一个棘手的问题,让我明白了这一点。通常,所有传入弧都需要令牌来继续操作。目前正在再次阅读规范…我认为您无法比较状态机和类似的活动。主要区别在于活动是主动的,而状态是被动的。AFAIK每个传入控制流在执行操作之前必须具有令牌的规则不适用于状态和转换。虽然状态机图和活动图共享一些类似的图形元素和方法,但它们并不完全一致。在状态机图中,只要任何即将到来的转换完成,状态就变为活动状态。因为通常有多种方式触发状态更改,这是唯一的逻辑方法。这与活动是不同的,所以在这个区域,这两张图是完全不同的。只看与活动图相关的部分(第401页),你的答案绝对正确。@Ister谢谢你。我必须仔细考虑这一点,最终将删除我答案的下半部分。我不完全同意合并在这个“隐式连接”中有任何不同。我从来没有像读状态机那样读OP的图表。希望我明天有时间。@Ister你完全正确。我更新了我的答案。@GeertBellekens是的,你是对的。尽管这两种符号都基于Petri网,但它们在UML中与不同的元素一起使用,并且在这方面有所不同。