「科学的モデリング&実装技法」によるUMLの『静的関連』と『動的関連』の峻別と設計と実装のテクニック
UMLで正確に関連についてモデルを作成するならば関連と依存関係について深く検討することが求められる。
関連の深い理解と正確なモデリングをしないエンジニアは良いモデラーになれないくらい、関連は奥が深い。
日本人は海外の専門家に比べて関連の興味が低い様で、かなりアバウトな設計と実装になっている。
UMLでは関連とリンクについて定義があるが、リンクは関連のインスタンスとは限らないという記述がある(この事を巡って多くの専門家や研究者で深く・熱い議論がある)。
リンクは関連のインスタンスと定義できればスッキリ出来るのであるが、プログラムの実装上の課題と解釈の問題で下記の2通りの解釈がある。
①(リンクは関連のインスタンスなのであるが)メッセージは通信リンクを使用しない時がある
②リンクの種類の中には関連のインスタンスでは無いものがある
なぜ、この2つの解釈の議論があるかについては別の機会。
どちらの解釈も課題がある。
さて、関連には「静的関連」と「動的関連」がある。
「静的関連」は専門家の中には「構造関連」と呼ぶ人もいる。
「動的関連」は専門家の中には「文脈関連」と呼ぶ人もいる。
「静的関連」は、関連端をクラスの属性のポインタあるいは参照として実装するタイプであり、静的にクラスの構造に反映される。
「動的関連」は、クラスの属性にする必要が無い関連である。4つほどのパターンがあるが、代表的なものに「パラメーター渡し」による一時的なリンクがある。
メッセージの引数にオブジェクト(の参照)を渡し、メッセージを受け取った方が引数のオブジェクトにメッセージを送るタイプが代表的である。
これは、クラスの属性のポインタあるいは参照として実装されないので、実行時に関数呼び出しで一時的に2つのオブジェクト間にリンクが生じる。ななので、「動的関連」として扱われる。
UMLでは明確にこれを指定するために、依存関係≪parameter≫で記述することになる。
その他、「動的関連」は≪self≫≪global≫≪local≫がある。
「静的関連」と「動的関連」のいずれの場合でも、クラスの型(タイプ)の情報がないとメッセージを送れないので、何らかの形で型を参照する必要がある。
例えば、クラス型を宣言(あるいは定義)しているファイルをC++ならinclude、Javaならimport、Adaならwithする。他にはC++ならfriendという事も可能だ。
別の方法は、対象のクラス型の「前方参照」で済む場合もある。
関連の設計にさらに神経を使うのは、関連は継承されるのでサブクラスでその関連をオーバーライドできる。(正確には{redefine}や{refine}となる)
『科学的なモデリング技法&実装』として、関連と依存関係も継承の規則とパターンを資料にまとめたので機会があれば公開と解説をしたい。
| 固定リンク
「パソコン・インターネット」カテゴリの記事
- 6つのテーマを同時並行作業(2019.07.05)
- すっかりご無沙汰してしましました(2018.05.27)
- CCCC(C AND C++CODE COUNTER)GUIランチャーの公開(2017.04.13)
- 作成したYicesのGUIからオプションを変えSMTを行う(2017.01.19)
- 『Yices』によるSMTソルバ(2017.01.18)
最近のコメント