ExpansionRegion(展開領域)

ExpansionRegion(展開領域)

これは、入力の集まりの要素(グループ)に応じて、複数回実行する構造化アクティビティ領域である。
入力、および、出力は、ExpansionNode(展開ノード)として、この領域に含まれる。

属性

mode
ExpansionKind=iterative この領域への入力がどのように実行されるかを指定する列挙値。次に示す3種類がある。
  1. parallel...入力は、並列的に実行される。
  2. iterative...入力は、順番に実行される。
  3. stream...入力は、ストリーム的に次々に実行される。

関連

inputElement
ExpansionNode[1..*] 入力される展開ノードのリスト。少なくとも1つある。
outputElement
ExpansionNode[0..*] 出力される展開ノードのリスト。0以上である。

制約

  1. 引数として、1つ以上の入力展開ノードを持たなければならない。
  2. 戻り値として、0個以上の出力展開ノードを持たなければならない。

セマンティクス

開始するとき
展開領域の実行に必要な入力展開ノードが揃ったとき、この領域の実行が開始される。
入力に対しての実行回数
入力の集まりの各要素ごとに1回実行される。
複数の入力に対して
複数の入力の集まりがある場合、mode属性の値によって、実行の方法が決定する。
parallelの場合
実行は並列、平行に発生しても構わない。ただし、これは必ずそうしなければならないわけではなく、強制力があるものではない。
iterativeの場合
順番どおりに実行される。1つが完了してから次を実行。
streamの場合
ストリーム的に実行される。順序を持つ入力は、展開領域の実行に順次ストリームとして投入される。このような場合、ストリームを適切にハンドリングするべきである。ストリーム全体の実行が完了すると、すべての出力ストリームは、入力と同じように組み立てられる。
展開ノードとは
これは、ある特定の要素のコレクションである。
型の統一
ある展開ノードに含まれるコレクションは、ある型で統一されている。
複数の展開ノード
入力として複数の展開ノードがある場合、それぞれのコレクションが保持する型が異なっていても構わない。
展開領域の実行回数
領域は、入力のコレクションのそれぞれの要素に対して、一度ずつ実行される。
入力>出力はOK
入力より、出力の数が少なくなっても構わない。この場合、領域は一種のフィルタとして働くことになる。出力の数は0になっても構わないし、入力と同じ数でも構わない。
ExpansionNodeの見え方
入力および出力であるExpansionNodeは、それをどこから見るかによって見え方が異なる。領域の外から眺めた場合、それらは単なる集まりとして映り、領域の内部から眺めた場合、それらの集まりを構成している各要素を識別することができる。

記法

  1. 左上の隅にキーワード、<>, <>, <>のいずれかを持つ、角の丸い破線の長方形として表す。
  2. 長方形の境界上に、入力および出力となる展開ノードを書く。入力/出力の見分け方は、そのノードへ矢印が向かっているか、もしくは、矢印がノードから出ていくかで判断する。
  3. 展開ノードは、たいてい小さな正方形を4つ繋げたもので示される。