関係の種類

ここでは,特別な意味があってUMLで特別な表記法が用いられている関係について述べる.

集約

集約(aggregation)は,「全体ー部分」の関係を示すもので,関連の一種とみなすことができる.図[*]を見ると,集約はひし形で表され,会社は社員で構成されているという関係構造を意味している.図[*]よりも,会社と社員の関係に全体と部分という意味が付加されたことでモデルの示す意味が分かりやすくなる.

集約によって,モデル構造を「全体-部分」として見ることができる.これにより「部分を理解することで,全体の理解が増す」または「全体を理解することで,部分の理解が増す」というように,理解できているクラスから先に見て,理解できにくいクラスの理解度を促進することができる.このように集約は,モデルの読み方にヒントを与える重要なテクニックである.

図:
\begin{figure}\begin{center}
\includegraphics[width=8.2cm]{UMLFIG/aggre-1.eps}
\end{center}\vspace{-1cm}
\end{figure}

コンポジション

集約関係の中で,「全体」と「部分」の強い関係になるものを特にコンポジション(composition)とよぶ.コンポジションは集約より強い全体部分関係を表し,「全体」のクラスと「部分」のクラスのライフサイクルが一致する.つまり,「全体」のインスタンスが消滅すると「部分」のインスタンスも消滅する.ということは,会社のインスタンスであるMIBが消えれば,そこの社員である田中も消えるので,「会社ー社員」の関係はコンポジションということになる.コンポジションはひし形を黒く塗りつぶして表記する.

図:
\begin{figure}\begin{center}
\includegraphics[width=8.2cm]{UMLFIG/comp-1.eps}
\end{center}\vspace{-1cm}
\end{figure}

汎化

ユースケースのところで考えたインターネットショッピングのシステムでは,顧客には個人の客と会社に所属している客とがあった.このとき,個人の客と会社に所属している客は共に顧客には変わりない.こんなとき,「顧客クラス」は「個人の客クラス」と「会社に所属している客クラス」の汎化(generalization)であるといい,次のように記述する.

図:
\begin{figure}\begin{center}
\includegraphics[width=7.8cm]{UMLFIG/class-5.eps}
\end{center}\vspace{-1cm}
\end{figure}

このとき,「顧客クラス」は「個人の客クラス」と「会社に所属している客クラス」の基本クラス(スーパークラス)であるといい,「個人の客クラス」と「会社に所属している客クラス」は「顧客クラス」のサブクラスであるという.ここで,「個人の客クラス」は「顧客クラス」であるといえるので,is-aの関係であるといい,「個人の客クラス」は「顧客クラス」を継承している.