関連(association)

関連はクラス間の関係を表し,2つのクラス間の関連の表示には関連名を用いる.また,2つのクラスがインスタンス化されたときの多重度を表すには多重度を用いる.多重度は下限値..上限値のように記述する.さらに,2つのクラス間の役割を表示するにはロール名(または役割名)を用いる.

関連の記述は以下のようになる.

図: 関連名とロール名
\begin{figure}\begin{center}
\includegraphics[width=9.7cm]{UMLFIG/class-2.eps}
\end{center}\vspace{-0.6cm}
\end{figure}

[*]の会社クラスと社員クラスの間の線が「関連」である.関連は,クラスから作成されるインスタンス間のつながり(リンク)の可能性を示すものである.会社には何人かの社員が必ずいる.また,会社に所属する人のことを社員というので,両クラスにはクラスの構造上で概念的な関係があるということを示したものが関連の意味である.注意すべきことは,関連は属性として表現されないことである.具体的にいうと,会社クラスの属性に社員リストという属性を入れることはできない.これは,UMLのクラス図の約束事だと思えばよい.実際にモデルをソースコードに落とす際には,関連はコレクションクラスなどで実装される属性となる.

多重度を理解するには,実際にクラスからインスタンスを生成して,自分自身がそのインスタンスになったつもりになるとよく分かる.例えば,あなたは従業員インスタンスの鈴木さんだとします.あなたが働いている会社をMIBとします.ここで,あなたから会社を見るとMIBという会社が1つだけ見える.このモデルでは,あなたはどこかの会社に必ず所属していなければならないというルールを元に定めているとする.なぜなら,どこにも所属しない社員インスタンスはありえないからである.また,複数の会社に所属することもできないというルールも前提とされている.つまり,あなたから見た会社という関連相手は必ず1つである.このことより,従業員クラスから見て会社に向かう線の先に「1」を書く.

図: 社員から見た会社の多重度
\begin{figure}\begin{center}
\includegraphics[width=7.2cm]{UMLFIG/class-company-2.eps}
\end{center}\vspace{-0.6cm}
\end{figure}

次は,あなたは会社クラスのインスタンスです.あなたは,複数の社員を雇うことができる.このときの可能性を考える.あなたから見て,社員が1人の会社,社員が数名の会社などが思いつくだろう.このとき,会社クラスのインスタンスには,1からN個の社員インスタンスがつながる可能性があると考えるわけだ.N個の表現はUMLでは「*」を使う.よって,1個からN個は「1..*」と表し,会社クラスから従業員クラスに向かう線の先に「1..*」と書く.

図: 会社から見た社員の多重度
\begin{figure}\begin{center}
\includegraphics[width=8.2cm]{UMLFIG/class-company-3.eps}
\end{center}\vspace{-0.6cm}
\end{figure}

関連の例をもう少しあげると,

図: 関連
\begin{figure}\begin{center}
\includegraphics[width=9.5cm]{UMLFIG/class-3.eps}
\end{center}\vspace{-0.6cm}
\end{figure}

などがある.役割名が記述されていない場合,クラス名が役割名となる.