クラス図の要素間の関係
UML 1.5 クラス図:インデックス への移動
関係とは要素間を接続するものです。 モデリング機能で最も重要な 3 つの関係は、依存と汎化と関連です。 図上では、関係の種類を判断できるよう、それぞれ異なる線を使って描画されます。
目次
クラス図の要素間の関係の種類
クラス図の要素の間では、次の種類の関係を使用することができます。
- 汎化と実装
- 依存
- 関連(単純な関連、N 項関連、集約、合成)
- 提供インターフェイスと要求インターフェイス(UML 2.0)
汎化と実装
- 汎化 -- 汎化とは、一般的な要素(スーパークラス、親)と、その要素をより具体化したもの(サブクラス、子)の間の関係です。 また、汎化を使って、2 つのインターフェイス(子と親)の間の継承関係を示すこともできます。
- 汎化とは、子が親のプロパティ(属性、オペレーションなど)を継承し、親要素のオブジェクトが現れるすべての場所で子要素のオブジェクトを使用できるという意味です。
- 図上で、汎化は、親を指す大きな白抜きの矢印が付いた実線で描画されます。
- 実装 -- 実装関係は、汎化関係の特殊なものです。 実装とは、子クラスが親インターフェイスを実装することを示す継承リンクです。
依存(dependency)
依存とは、一方の要素(独立した要素 - サプライヤ)を変更すると、他方の要素(依存した要素 - クライアント)に対する変更が必要になるという、2 つの要素間の関係です。
関連(association)
2 つのクラスのインスタンス間の関係です。 2 つのクラス間に関連が存在するのは、一方のクラスのインスタンス(クライアント)が、他方(サプライヤ)について知っている必要がある場合です。
図上で、関連は、2 つのクラスを結ぶ実線で描画されます。
詳細を指定するために、必要に応じて誘導可能性、ロール、多重度を関連上に記述することができます。
- 関連の誘導可能性。 関連には矢印の付いたものと付かないものがあります。 矢印の付いたリンクは、サプライヤ クラス(リンク先)を指しています。 関連に付けられた誘導可能性の矢印は、関連をたどって移動したり問い合わせを行うことができる方向を示します。 クラスが自分の "項目" について問い合わせることはできますが、その逆はできません。 この矢印を見ると、関連の実装をどちらが "所有" しているかを知ることもできます。 誘導可能性の矢印が付いていない関連は、双方向です。 たとえば、
図書館
クラスと本
クラスの間に双方向の関連があれば、図書館
型のオブジェクトから本
型のオブジェクトへたどることも、逆方向にたどることも可能です。
- ロール。 関連には 2 つの端があります。 それぞれの端にロール名を付けて、関連がどういうものかを明確に示すことができます。
- 多重度。 関連端には多重度を指定することができます。 関連端の多重度とは、反対側の関連端の 1 つのインスタンスに対して関連付けることのできる、元のクラスのインスタンスの数です。 多重度は、数または数の範囲で表します。
よく使われる多重度を次の表に示します。
多重度 | 意味 |
---|---|
|
0 個または 1 個のインスタンス。 |
|
必ず 1 個のインスタンス、または必ず |
|
インスタンス数に制限はありません(ゼロも含みます)。 |
|
少なくとも 1 個のインスタンス。 |
関連の種類
関連関係には次の種類があります。
- 関連(単純な関連) -- 2 つの対等なクラス間の関連("単純な関連")です。 対等な 2 つのものの間の、純粋な構造的関係を表します。 双方のクラスは概念的に同じレベルであり、一方が他方より重要ということはありません。
- 関連(N 項関連) -- N 項関連では、必要な数の関連端クラス(構成要素)を接続することができます。 N 項関連を作成するには関連クラスを使用します。
- 関連クラス、関連リンク、およびコネクタの[オブジェクト インスペクタ]には、[関連]タブが追加で表示されます。 このタブにはラベルのプロパティだけが含まれ、その値は関連クラスの名前と同期しています。 関連クラスと関連端リンクでは、[オブジェクト インスペクタ]の[カスタム]項目に、N 項関連のこの部分のロールに対応するプロパティが追加で表示されます(それぞれ
associationClass
およびassociationEnd
)。 - 関連端リンクや構成要素クラスのどれを削除しても、N 項関連全体が壊れることはありません。 ただし、関連クラスを削除すると、N 項関連のすべての部品が削除されます。
- 次も参照してください: 関連クラスを作成する
- 関連クラス、関連リンク、およびコネクタの[オブジェクト インスペクタ]には、[関連]タブが追加で表示されます。 このタブにはラベルのプロパティだけが含まれ、その値は関連クラスの名前と同期しています。 関連クラスと関連端リンクでは、[オブジェクト インスペクタ]の[カスタム]項目に、N 項関連のこの部分のロールに対応するプロパティが追加で表示されます(それぞれ
- 集約 -- 集約は "部分 - 全体" の関係を表す特殊な関連です。一方のクラスが大きい要素("全体")を表し、そこに小さい要素("部分"。複数可)が含まれます。 部分を表す個々のクラスと全体を表す 1 つのクラスの間に、別々の集約リンクを作成します。
- この図は集約リンクを表しています。
Group
クラスは "全体" を、Person
クラスは "部分" を表します。 両端の0..*
という多重度と、union
およびmember
というロールによって、それぞれのunion
(Group
型)が任意の数のmember
(Person
型)を含むことができ、逆にPerson
型の各オブジェクトが任意の数のunion
(Group
型)のmember
になれることが示されています。 この集約の誘導可能性は双方向であるため、Group
型のオブジェクトはそこに含まれるPerson
型の member を要求でき、Person
型のオブジェクトは自分が member になっている union(Group
型)を要求できます。
- この図は集約リンクを表しています。
- 合成 -- 合成は "強い" 形態の特殊な集約であり、その "合成端" は "部分端" の管理について全責任を負います(部分の作成や破棄など)。
- この図は合成リンクを表しています。
Order
クラスは "合成" を、Customer
クラスおよびLineItem
クラスは "部分" を表します。
- この図は合成リンクを表しています。
提供インターフェイスと要求インターフェイス
UML 2.0 のクラス図では、提供インターフェイスと要求インターフェイスが導入されています。
提供インターフェイスと必須インターフェイスを示すために、UML 2.0 のクラス図では、提供インターフェイス リンク ("ロリポップ" 表記)と必須インターフェイス リンク ("ソケット" 表記)を使用します(「UML 2.0 クラス図の要素」を参照)。