【问题标题】:Join and Merge in activity diagram在活动图中加入和合并
【发布时间】:2018-01-07 10:34:49
【问题描述】:

统一建模语言活动图中的 Join 和 Merge 有什么区别。举个例子让理解更清楚。

【问题讨论】:

    标签: uml activity-diagram


    【解决方案1】:

    加入节点(见reference 1):

    Join 节点是一个控制节点,它有多个传入边和一个 传出边缘,用于同步传入并发流。 引入连接节点以支持活动中的并行性

    合并节点(见reference 2):

    Merge 节点是一个控制节点,它汇集了多个传入的 交替流接受单个传出流。没有加入 令牌。合并不应用于同步并发流


    例如如下图:

    在分叉之后使用决策,从决策出来的两个流需要合并为一个,然后才能加入

    为什么?:否则,连接将等待两个流。

    所以Activity 2Activity 3 是我们的备用流程,并且只有其中一个会到达。而且它们同步传入。

    然而Concurrent_ActivityActivity 1Activity 2 之间的决策结果(合并为一个输出)是同步传入的并发流。加入等待两者执行并继续。

    【讨论】:

    • 即使规范的所有示例都像@Gholamali-Irani 解释的那样,您可以在分叉后使用合并节点,它不仅仅用于合并备用流。规范解释说“MergeNode 是一个控制节点,它可以在不同步的情况下汇集多个流。”
    • 一个合并可以有超过 3 个输入流吗?
    • TL;DR 和更简单的版本:JOIN 需要完成两个即将到来的活动。 MERGE 只是等待传入活动之一完成。 JOIN 块,MERGE 不会。
    【解决方案2】:

    详细说明@Gholamali-Irani 的回答:活动图源自Petri nets。简而言之,您必须想象一个从一个初始起点(那个胖点)开始的单一“令牌”。令牌沿着一条路径行进,直到它消失在那些(带圆圈的点)最终终端之一(或 UML 允许在没有传出路径的操作中)。分叉节点会将单个令牌乘以与它具有传出路径一样多的令牌(UML 还具有用于具有多个未受保护的传出路径的操作的隐式分叉)。因此,这些多个令牌独立传播,直到它们像上面描述的那样消失,或者它们到达具有多个进入路径的连接(或动作)。在这里,令牌一直等到所有路径都输入了一个令牌。然后将这些多个令牌合并为一个像往常一样传播的单个令牌。

    使用此规则集,您可以对任何复杂的并发网络进行建模。

    【讨论】:

    • 非常感谢 Patri net 的提示。它是数学建模语言。我可以使用它在我的研究论文中将我的活动图映射到数学世界。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    • 2018-02-15
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多