web-dev-qa-db-ja.com

UMLアクティビティ図の制御フローでオブジェクトフローをトリガーする最良の方法は何ですか?

オブジェクトがフロー内のポイントを通過できるかどうかを制御フローに決定させたい。コントロールとオブジェクトフローについての私の理解から、オブジェクトとコントロールフローが未定義のものに結合されているため、これは私が行った方法では機能しません。これを行う正しい方法はどのようになりますか?

enter image description here

編集:

私はいくつかの調査を行い、UML仕様でこれを偶然見つけました。

enter image description here

図15.59は、DataStoreNodeの使用例です。採用した従業員のレコードは、人事データベースに保持されます。従業員に割り当てがない場合、割り当ては従業員を使用して行われます。年に1回、すべての従業員がパフォーマンスのレビューを受けます。 JoinNodeは、AcceptEventAction(サブセクション16.10を参照)が「1年に1回」トリガーされた場合を除き、Review Employeeへのトークンのフローをブロックします。 AcceptEventActionが毎年の制御トークンを生成すると、これはJoinNodeの結合条件を満たします。人事データベースからの発信エッジには「{weight = *}」があるため、すべてのオブジェクトトークンのオブジェクトトークンが永続化された従業員レコードは、Review Employeeに流れます。

これは、未定義の結合の場合とまったく同じではありませんか?

2
lokus

どちらの場合も、JoinNodeの出力EdgeはObjectFlowであり、「未定義のもの」ではありません。

ML仕様によると、15.3.3.4結合ノード

JoinNodeの着信エッジのいずれかがObjectFlowsである場合、発信エッジはObjectFlowになります。それ以外の場合、発信エッジはControlFlowです。

ご了承ください:

結合ノードには、結合がトークンを発行する条件を決定するjoinSpecがある場合があります。

デフォルトでは、JoinNodeは次のように動作します。

着信エッジで提供されるトークンの一部が制御トークンであり、他のトークンがオブジェクトトークンである場合、オブジェクトトークンのみが発信エッジで提供されます。トークンは、結合に提供されたのと同じ順序で発信Edgeに提供されます

1
zer0hedge

最も簡単な方法はこれです:

enter image description here

get dataは、適切なもの(メインまたはフォールバック)を内部的に選択し、process dataに送信します。


上記はピンを使用しています(p。513 od UML 2.5):

16.14.33ピン[抽象クラス]

16.14.33.1説明

Pinは、アクションに入力値を提供するか、アクションから出力値を受け入れるObjectNodeおよびMultiplicityElementです。

5
qwerty_so