UML(Unified Modeling Language)におけるクラス間の「相互関係」の種類及び関係の表現法をまとめます。また、Javaのクラス実装との対応も付記します。
関連(association)
クラス間に何らかの結びつきがある関係
「has-a関係」AはBを持っている関係
[実装]データメンバが他のクラスのインスタンスを参照する。
「has-a関係」AはBを持っている関係
[実装]データメンバが他のクラスのインスタンスを参照する。
集約(aggregation)
クラス間に関連よりも強い結びつきがある関係
「owns-a関係」AはBを所有している関係
二つのクラスが「全体-部分」の関係だが、他のクラスとの共有の場合もありうる。
なお、ひし形は相手を所有する、「全体」側に付きます。
[実装]データメンバが他のクラスのインスタンスを参照する。
「owns-a関係」AはBを所有している関係
二つのクラスが「全体-部分」の関係だが、他のクラスとの共有の場合もありうる。
なお、ひし形は相手を所有する、「全体」側に付きます。
[実装]データメンバが他のクラスのインスタンスを参照する。
コンポジション(composition)
クラス間に集約よりも強い結びつきがある関係
「part-of関係」BはAの一部である完全な包含関係
二つのクラスが「全体-部分」の独占関係で同時に生成・消滅する。
なお、ひし形は相手を所有する、「全体」側に付きます。
[実装]データメンバが他のクラスのインスタンスを参照する。
「part-of関係」BはAの一部である完全な包含関係
二つのクラスが「全体-部分」の独占関係で同時に生成・消滅する。
なお、ひし形は相手を所有する、「全体」側に付きます。
[実装]データメンバが他のクラスのインスタンスを参照する。
依存(dependency)
あるクラスが別のクラスを一時的に利用する関係
[実装]あるクラスのメソッド内で別のクラスのインスタンスを使用する。
[実装]あるクラスのメソッド内で別のクラスのインスタンスを使用する。
汎化(generalization)
あるクラス(スーパークラス)を元に別のクラス(サブクラス)を派生させ、元のクラスの属性・操作も引き継ぐ関係
「is-a関係」Bはある種のAである関係
Javaでいう「継承」
なお、サブクラスからスーパークラスを導くのが汎化、逆にスーパークラスからサブクラスを導くのが特化
「is-a関係」Bはある種のAである関係
Javaでいう「継承」
なお、サブクラスからスーパークラスを導くのが汎化、逆にスーパークラスからサブクラスを導くのが特化
実現(realization)
他のクラスに「扱い方」、具象化時の条件を規定する関係
Javaでいう「Interface」
Javaでいう「Interface」