アクティビティー・ダイアグラムのロジックが複雑になった場合、ロジックを区分し、ロジックの個別単位を サブダイアグラム として使用する方が役に立つことがあります。各サブダイアグラムは、特定のメインダイアグラムに関連付けられます。
図 43 に、アクティビティー・メインダイアグラムに Retrieve サブダイアグラムと Delete サブダイアグラムという 2 つのサブダイアグラムへの参照が含まれるシナリオを示します。
シナリオ内のアクティビティー・ダイアグラムは、階層的に配置されています。
シナリオ内のすべてのサブダイアグラムとイテレーターは、シナリオのアクティビティー・メインダイアグラムより下位にあります。図 44 にこの関係を示します。
サブダイアグラム・シンボルが表示されるアクティビティー・ダイアグラムは、サブダイアグラムの親ダイアグラム と呼ばれます。
サブダイアグラムは、すべてのコラボレーション・テンプレート・プロパティーおよびすべてのシナリオ変数にアクセスできます。表 39 に、サブダイアグラムとメインダイアグラムの相違点を要約します。
サブダイアグラムをアクティビティー・ダイアグラムに追加する手順は、以下のとおりです。
サブダイアグラムの固有 ID が表示され、シナリオ・ツリーの階層内で親ダイアグラムの下に配置されます。
シナリオ・ツリーでは、名前が以下のフォーマットで表示されます。
(UID)
サブダイアグラムにラベルを使用する場合、シナリオ・ツリーでは、名前が以下のフォーマットで表示されます。
label (UID)
UID は、シナリオ・ツリー内のサブダイアグラム・オブジェクトの名前でもある固有 ID です。
その他のシンボルの UID のように、サブダイアグラムの UID を表示するかどうかを選択できます。UID の表示のオン/オフを切り替えるには、テンプレート・ツリーのシナリオ・ノードのコンテキスト・メニューを使用します。
新しいアクティビティー・ダイアグラムを定義するための新しいウィンドウが作業域に表示されます。
アクティビティー・メインダイアグラムの場合と同じように、サブダイアグラムも開始シンボルから始まって終了成功シンボル (および必要に応じて 1 つ以上の終了障害シンボル) で終わります。サブダイアグラムには、すべてのダイアグラミング・コンポーネント (サブダイアグラムおよびイテレーターを含む) を入れることができます。
サブダイアグラムがアクティビティー・ダイアグラムに表示されたら、「Subdiagram Properties」ダイアログでそのプロパティーを定義できます。
サブダイアグラムのプロパティーは、そのラベルおよび説明です。
これらのプロパティーを使用するかどうかは任意です。
サブダイアグラム・プロパティーを定義する手順は、以下のとおりです。
このダイアログは、以下のいずれかの方法で表示できます。
UID より詳しいテキストを使用してサブダイアグラムにラベルを付けることにより、アクティビティー・ダイアグラムがよりわかりやすくなります。
「説明」フィールドは、サブダイアグラムの目的を示すコメント用フィールドです。
サブダイアグラムを削除するには、親ダイアグラムまたはサブダイアグラムを表示し、以下の手順を実行します。
シナリオ・ツリーで親ダイアグラムを展開すると、サブダイアグラムが削除されている場合はサブダイアグラム名が表示されません。
親ダイアグラムの実行は、サブダイアグラムの実行状況に対応しています。
サブダイアグラムの例外時の振る舞いと完了状況を決定するのは、サブダイアグラムの開発者です。コラボレーションは以下のいずれかの手順でサブダイアグラムを意図的に終了できます。
終了成功の終了ノードは、実行が正常に終了していることを示します。サブダイアグラムの終端に終了成功ノードが配置されている場合には、コラボレーション・ランタイム環境によりサブダイアグラムが終了され、制御が親ダイアグラムに渡されます。
親ダイアグラムのフローは、サブダイアグラム・ノードの次のノードに進みます。一般にこの次のノードは、サブダイアグラムの状況を調べる決定ノードです。この決定ノードには、サブダイアグラムの実行状況を評価する以下の分岐を設定できます。
コラボレーションが標準状態で実行されると、コラボレーション・ランタイム環境により標準分岐の条件が評価されます。true と評価される標準分岐がない場合にはデフォルトの分岐が実行されます。
コラボレーションが例外状態で実行される場合、コラボレーション・ランタイム環境により例外分岐の条件が評価されます。
サブダイアグラムが正常終了する場合、以下のいずれかの方法で終了します。
コラボレーションは標準状態で実行されます。制御が親ダイアグラムに渡され、親ダイアグラムの次のノードが決定ノードの場合、コラボレーション・ランタイム環境により標準分岐がすべて評価されます。
コラボレーションは標準状態で実行されます。制御が親ダイアグラムに渡され、親ダイアグラムの次のノードが決定ノードの場合、コラボレーション・ランタイム環境により標準分岐がすべて評価されます。
この場合、コラボレーションは例外状態で実行されます。制御が親ダイアグラムに渡され、親ダイアグラムの次のノードが決定ノードの場合、コラボレーション・ランタイム環境により例外分岐がすべて評価されます。この例外分岐は、例外を処理するアクション・ノードにも到達する必要があります。例外を処理する最善の方法は、この例外を再度発生させ、例外の理由として例外テキストを含めるという方法です。
アクティビティー・ダイアグラムに複数のレベルがあるコラボレーションの場合、raiseException() メソッドを使用して各レベルを通して例外を生成し、未解決のフローのリストに元の例外テキストを表示する必要があります。
以降の各 raiseException() 呼び出しは、例外を生成して元の例外テキストを渡します。例外がメインダイアグラムに到達すると、コラボレーション・ランタイム環境は、例外処理操作 (ログへの書き込みなど) を実行するか、コラボレーションがトランザクションである場合はロールバックを開始します。
決定ノードの作成方法の詳細については、決定ノードを参照してください。例外処理の実装方法の詳細については、例外処理を参照してください。
終了障害の終了ノードは、実行が正常に終了していない ことを示します。サブダイアグラムの終端に終了障害ノードが配置されている場合には、コラボレーション・ランタイム環境によりこのサブダイアグラムとコラボレーション全体が終了されます。
制御がコラボレーション・ランタイム環境に渡されます。これにより、コラボレーションのログ記録先にエントリーが記述され、未解決のフローが作成されます。
サブダイアグラムを失敗で終了する場合、以下のいずれかの方法で終了します。
サブダイアグラムが終了障害ノードで終わっている場合には、コラボレーション・ランタイム環境によりコラボレーション全体 が終了されます。サブダイアグラムで検出された例外を処理する方法については、サブダイアグラムまたはイテレーターの正常終了を参照してください。コラボレーション・ランタイム環境による未解決のフローの作成方法については、メインダイアグラムの正常終了を参照してください。