ExpansionRegion(展開領域)
ExpansionRegion(展開領域)
これは、入力の集まりの要素(グループ)に応じて、複数回実行する構造化アクティビティ領域である。
入力、および、出力は、ExpansionNode(展開ノード)として、この領域に含まれる。
属性
- mode
- ExpansionKind=iterative この領域への入力がどのように実行されるかを指定する列挙値。次に示す3種類がある。
- parallel...入力は、並列的に実行される。
- iterative...入力は、順番に実行される。
- stream...入力は、ストリーム的に次々に実行される。
関連
- inputElement
- ExpansionNode[1..*] 入力される展開ノードのリスト。少なくとも1つある。
- outputElement
- ExpansionNode[0..*] 出力される展開ノードのリスト。0以上である。
制約
- 引数として、1つ以上の入力展開ノードを持たなければならない。
- 戻り値として、0個以上の出力展開ノードを持たなければならない。
セマンティクス
- 開始するとき
- 展開領域の実行に必要な入力展開ノードが揃ったとき、この領域の実行が開始される。
- 入力に対しての実行回数
- 入力の集まりの各要素ごとに1回実行される。
- 複数の入力に対して
- 複数の入力の集まりがある場合、mode属性の値によって、実行の方法が決定する。
- parallelの場合
- 実行は並列、平行に発生しても構わない。ただし、これは必ずそうしなければならないわけではなく、強制力があるものではない。
- iterativeの場合
- 順番どおりに実行される。1つが完了してから次を実行。
- streamの場合
- ストリーム的に実行される。順序を持つ入力は、展開領域の実行に順次ストリームとして投入される。このような場合、ストリームを適切にハンドリングするべきである。ストリーム全体の実行が完了すると、すべての出力ストリームは、入力と同じように組み立てられる。
- 展開ノードとは
- これは、ある特定の要素のコレクションである。
- 型の統一
- ある展開ノードに含まれるコレクションは、ある型で統一されている。
- 複数の展開ノード
- 入力として複数の展開ノードがある場合、それぞれのコレクションが保持する型が異なっていても構わない。
- 展開領域の実行回数
- 領域は、入力のコレクションのそれぞれの要素に対して、一度ずつ実行される。
- 入力>出力はOK
- 入力より、出力の数が少なくなっても構わない。この場合、領域は一種のフィルタとして働くことになる。出力の数は0になっても構わないし、入力と同じ数でも構わない。
- ExpansionNodeの見え方
- 入力および出力であるExpansionNodeは、それをどこから見るかによって見え方が異なる。領域の外から眺めた場合、それらは単なる集まりとして映り、領域の内部から眺めた場合、それらの集まりを構成している各要素を識別することができる。
記法
- 左上の隅にキーワード、<
>, < >, < >のいずれかを持つ、角の丸い破線の長方形として表す。 - 長方形の境界上に、入力および出力となる展開ノードを書く。入力/出力の見分け方は、そのノードへ矢印が向かっているか、もしくは、矢印がノードから出ていくかで判断する。
- 展開ノードは、たいてい小さな正方形を4つ繋げたもので示される。