集約とコンポジションの実装方法

UMLでクラス間の関係が集約とコンポジションである場合の実装例をC#とVBで紹介する。集約は白抜きのひし形を付けた関連で、コンポジションは黒塗りのひし形を付けた関連であり、どちらも関連の一種である。その違いを簡単に説明すると、集約が弱い結びつきであるのに対して、コンポジションは一心同体の強い結びつきを表す。集約は、関連する先のオブジェクトが最初からある場合もあるし、外したり、後から追加されたりするような関係である。一方、コンポジションはオブジェクトが生成されるときに、関連する先のオブジェクトも同時に生成され、破棄されるときは同時に破棄されるような関係である。

実装上の違いはほとんどない。筆者は、コンポジションは生成と破棄のタイミングが同じであるから、属性として宣言したときに最初からNewしてインスタンスを生成するようにしている(絶対ではない)。一方、集約は関連先のオブジェクトがいつ生成されるか分からないし、生成されないかもしれないので、オブジェクトの参照だけを宣言する。なお、関連を集約として表現している場合と、集約なしのただの線として表現している場合に実装上の違いはない。


サンプルは、上記クラス図の社員クラスの実装である。社員は必ずアドレスを持っているのでアドレスクラスをコンポジションで設計してあり、実装上は社員クラスのインスタンス生成と同時にアドレスクラスもインスタンス化される。資格クラスは資格がない場合もあるので、ライセンスクラスの型だけ宣言している。


トラックバック

トラックバックURL:
http://www.apricot-jp.com/cgi/mt/mt-tb.cgi/288

関連情報

Copyright(C) 2007 アーキテクト360 Allrights reserved.