web-dev-qa-db-ja.com

アクティビティ図での結合とマージ

統合モデリング言語アクティビティ図の結合とマージの違いは何ですか。より明確に理解するための例を挙げてください。

6
AzeEm AnJum

Join Node参照1 を参照):

結合ノードは、複数の入力エッジと1つの出力エッジを持つ制御ノードであり、入力同時フローを同期するために使用されますアクティビティの並列処理をサポートするために、結合ノードが導入されました

ノードのマージ参照2 を参照):

マージノードは、複数の着信代替フローをまとめて単一の発信フローを受け入れる制御ノードです。トークンの結合はありません。マージは、同時フローの同期には使用しないでください


たとえば、下の図の

分岐の後に決定が使用されます。決定から出てくる2つのフローは、結合に進む前に1つにマージされる必要があります。

理由:それ以外の場合、結合は両方のフローを待機します。

SoActivity 2およびActivity 3は、代替フローであり、のみですそのうちの1つが到着します。そして、それらはではありません着信を同期しません。

ただしConcurrent_ActivityおよびActivity 1Activity 2(1つの出力にマージされた)の間の決定の結果は、着信同時フローを同期します。結合は、両方の実行と続行を待機します。

enter image description here

10
Gholamali-Irani

@ Gholamali-Iraniの答えを詳しく説明するには:アクティビティ図は Petri nets から導出されます。つまり、最初の開始点(ファットドット)から始まる単一の「トークン」を想像する必要があります。トークンは、それらの(丸で囲まれたドット)最終ターミナルの1つで消失するまで(または、UMLが発信パスのないアクションで許可されるまで)、パスに沿って移動します。 forkノードは、その単一のトークンを、それが発信パスを持っているのと同じ数のトークンに乗算します(UMLには、保護されていない複数の発信パスを持つアクションの暗黙的なフォークもあります)。したがって、これらの複数のトークンは、上記のように消失するか、複数の入力パスを持つ結合(またはアクション)に到達するまで、独立して移動します。ここで、トークンは、すべてのパスに単一のトークンが供給されるまで待機します。次に、これらの複数のトークンが1つのトークンにマージされ、通常どおり移動します。

このルールセットを使用すると、複雑な同時ネットワークをモデル化できます。

3
qwerty_so