第 51 回 適用アクション 適 用 ア ク シ ョ ン に 属 す る 具 体 的 な ア ク シ ョ ン は 、 こ の ApplyFunctionAction の 1 つ だ け で す 。 ApplyFunctionAction は、入力情報のみを使って出力を計算するアクションで、メモリー等へのアクセス もなく全く副作用の発生しないものです。 元々は、モデル化対象のシステムの外側にある振る舞いを呼び出すために導入が検討されましたが、パッ ケージのスキーム変更により、特段定義する必要がなくなり、最終版仕様書からは除かれました。注意す べき点としては、適用アクションそのものが存在しなくなったのではなく、名前を付けて区別する必要性 がなくなったと言う点です。
第 52 回 オブジェクトアクション
図11-06
オ ブ ジ ェ ク ト ア ク シ ョ ン は 、 図 1 1 − 0 6 に 示 さ れ る 4 つ の ア ク シ ョ ン 、 CreateObjectAction、DestroyObjectAction、TestIdentityAction、ReadSelfAction の総称です。ただ し、これらの4つのアクションには構造上の共通性がないので、特段共通のスーパーメタクラスは定義さ れていません。
第 53 回 CreateObjectAction UML の仕様上、一般的に、制約条件に違反した場合の振舞いは規定されておりません。 CreateObjectAction は、指定された分類子に適合するオブジェクトを生成し、それを出力ピンに置くアク ションです(オブジェクトそのものが戻り値になります)。このアクションは、単にオブジェクトを生成 するだけであり、初期値やリンクを設定したり、ステートマシンの遷移を引き起こしたりと言った副作用 を全く伴いません。 分類子は抽象クラスではあってはならない。 分類子は関連クラスであってはならない。 出力ピンの多重度は1。
第 54 回 DestroyObjectAction 入力ピンのオブジェクトを消滅させるアクションであり、初期値やリンクを設定したり、ステートマシン の遷移を引き起こしたりと言った副作用を全く伴いません 。また、オブジェクトとしてリンクオブジェク トも対象になり、その場合 DestroyLinkAction の定義に沿って処理されます。 このアクションは 2 つの属性、isDestroyLinks と isDestroyOwnedObjects を持っており、意味は次の通 りです。 isDestroyLinks 初期値は false:この属性が true の場合、対象のオブジェクトが関わっているリンクもす
べて消滅させる。 isDestroyOwnedOwnedObject 初期値は false:この属性が true の場合、対象のオブジェクトが所有す るオブジェクトもすべて消滅させる。 入力ピンの多重度は1。
第 55 回 TestIdentityAction と ReadSelfAction 入力ピンに置かれた 2 つのオブジェクトが同一のものかどうかを調べます。同一であれば true、そうでな ければ false を出力ピンに置きます。 すべてのアクションは、振る舞いもしくは振る舞いの一部であり、振る舞いは何らかの分類子の特徴です。 (例えば、操作は何らかのクラスの特徴) この ReadSelfAction は、アクションが行われる主体(ホスト・インスタンスと呼ばれます)を、出力ピン に置くアクションです。これは、パラメータの情報だけではアクションの主体が特定できない時などに、 ホスト・インスタンスにアクセスするために付け加えられたアクション です。また、親のオブジェクトが 存在しないときは、振る舞いそのものがホスト・インスタンスとなります。
第 56 回 構造化特性アクション UML1.X では、オブジェクトは単純な構造でしたので、属性を読み取ったり(ReadAttributeAction)、書 き込んだり(WriteAttributeAction)という簡単なアクションで済んでいたのですが、UML2.X で構造化分 類子が登場し、単に属性の読み書きでは不十分になった結果、この構造化特性アクションが導入されました。 基本的には、対象のオブジェクトにたいし、その構造的特性を読み書きするためのアクションですが、具 体 的 に は 、 ReadStructualFeatureAction、 WriteStructualFeatureAction、ClearStructualFeatureAction の 3つ のサブクラスが意味を与えています。 図11-07
第 57 回 ReadStructuralFeatureAction 入力ピンに置かれた対象オブジェクトの SturcturalFeature で指定された値を読んで出力ピンに置くアク ションです。 例えば、カプセル化クラス A 1の中にクラス A2 が存在し、A2 の属性Bをアクセスしたい場合、入力ピン には A1 のインスタンスを置き、StructuralFeature は A1 中の A2 中のBを指定します。
第 58 回 WriteStructuralFeatureAction 入力ピンで指定されたオブジェクトの構造化特性の値を変更するための抽象メタクラスで、具体的なアク ションは、AddStructuralFeatureValueAction と RemoveStructuralValueAction の2つのサブクラス が規定しています。なお、属性は複数の値を着けることができ、内部的には順序付のリスト構造の形 で保 持されます。
第 59 回 AddStructuralFeatureValueAction と RemoveStructuralFeatureAction AddStructuralFeatureValueAction: 構造化特性の値を付け加える為のアクション で、値の置き換えを行うことも可能です。構造化特性は、複 数の値が順序づけられて並べてある構造をしており、挿入点(insertAt)を指定して新しい値を挿入します。 属性 isReplaceAll が true の場合、新しい値の挿入前に古い値がすべて取り除かれ、値の入れ替えが可能 で す。指定された構造化特性が関連端であった場合、意味的にはリンクを形成することと同じ意味 になりま す。 挿入点(insertAt)は、整数値を取り、1は先頭を意味し、*は末尾に付け加えることを意味します。
RemoveStructuralFeatureAction: 入力ピンで指定されたオブジェクトから構造化特性の値を取り去るアクションです。 取り去る値を入力ピンで指定することも可能ですし、除去する場所を removeAt(removeAt は整数値を 取る)で指定することも可能です。値を指定した場合、構造化特性中に該当する値が存在しない場合は、 何も起こらないことを意味します。指定された構造化特性が関連端であった場合、意味的にはリンクを消 滅させることと同じ意味になります。また、属性 isremoveDuplicates が true の時は、指定した値が複数 ある場合はその重複する値すべてが取り除かれます。
第 60 回 ClearStructuralFeatureAction 入力ピンで指定されたオブジェクトから、構造化特性の値をすべて一度に取り去るアクション です(例え 構造化特性の多重度の下限を下回ってしまっても、取り去ってしまいます )。指定された構造化特性に値 が全くなかった場合は、何も起こらないことを意味します。
第 61 回 リンクアクション リンクアクションは、リンクの生成や消滅、リンク情報の読み書きを行うためのアクションです。 LinkAction は ReadLinkAction と WriteLinkAction の共通のスーパーメタクラスであり、対象のリンクを 特定するための情報構造を持っています。 図11-08
図 1 1 − 0 8 に 示 さ れ る と お り 、 LinkEndData は リ ン ク 端 を 意 味 し 、 LinkAction は 2 つ 以 上 の LinkEndData を持ち、それぞれが対応する関連端(図中の Property)と関係づけられています。 入力ピン(InputPin)は、サブクラスで規定されるアクションによって使い方が変わってきます。一例として WriteLinkAction の場合、リンクを形成する関連端ごとに、接続対象のオブジェクトもしくは値が指定さ れている必要があります。
第 62 回 ReadLinkAction と WriteLinkAction 図11-09
ReadLinkAction は、対応する関連に沿って 1 つのリンク端へ誘導し、入力ピンに指定されていないリンク 端(オープンエンドと呼びます)のオブジェクトを出力ピンに置きます。オープンエンドにたいし、誘導 可能性がなかったり、可視性が適切でない場合は、アクションのセマンティックスは定義されていません。 入力ピンは、リンク端のソース側を指定し、ターゲット側をオープン(指定しない状態)にします。なお、 3項関連以上の n 項関連では、1つのリンク端をオープンにします。 図11-10
WriteLinkAction は 、 リ ン ク を 生 成 し た り 消 滅 さ せ た り す る 抽 象 メ タ ク ラ ス で す 。 生 成 は CreateLinkAction、消滅は DestroyLinkAction によって規定されます CreateLinkAction は 、 リ ン ク を 生 成 し ま す 。 直 接 LinkEndData を 用 い ず 、 そ れ を 特 化 し た LinkEndCreationData を 用 い る の は 、 順 序 づ け さ れ た 関 連 を サ ポ ー ト す る た め で す 。 LinkEndCreationData は、重複するリンクが存在する場合に何番目にリンクを挿入するかを指定する値 (insertAt)を持っています。 DestroyLinkAction は 、 リ ン ク を 消 滅 さ せ ま す 。 直 接 LinkEndData を 用 い ず 、 そ れ を 特 化 し た LinkEndDestructionData を 用 い る の は 、 順 序 づ け さ れ た 関 連 を サ ポ ー ト す る た め で す 。 LinkEndDestructionData は、重複するリンクが存在する場合に何番目のリンクを消滅させるかを指定す る値(insertAt)を持っています。 ClearAssociationAction は、リンクアクションではありませんが、関連が深いのでここで解説致します。 入力ピンで指定されたオブジェクトの、指定された関連に属するすべてのリンクを消滅させるアクション です。
第 63 回 変数アクション
図11-17
変数アクションは、変数を扱うためのアクションで、 ReadVariableAction、WriteVariableAction、ClearVariableAction の 3 つから構成されます。注:変数 は、一度に複数の値を持つことが可能です。 ReadVariableAction: 変数の値を読み取って、出力ピンに置きます。変数の多重度と出力ピンの多重度は一致している必要があ ります。 WriteVariableAction: 変数の値を変更するアクションで、AddVariableValueAction と RemoveVariableAction の 2 種類からな ります。 ①AddVariableValueAction: 変数の指定された場所に値を付け加えるアクションです。insertAt が1である場合、先頭に値を挿入する 意味になり、*は末尾に付け加える意味になります。属性 isReplaceAll が true の場合、変数から既存のす べての値を取り去った後に、値を付け加えます。 ②RemoveVariableAction: 変数から、指定された値を取り除きます。属性 isRemoveDuplicates が true の場合は、指定された値と同 一のすべての値が変数から取り除かれます。(例え多重度の下限を下回る結果になろうとも取り除かれま す。)また、isRemoveDuplicate が false の場合は、何番目の値を取り除くのかを removeAt で指定する 必要があります。(removeAt は正整数、UnlimitedNatural です。) ClearVariableAction: ClearVariableAction は、変数から値をすべて取り除くアクションです。(例え、多重度の下限を下回る結 果になろうとも、取り除かれます。)