LoginSignup
27
22

More than 5 years have passed since last update.

学習メモ:コンポジションと集約

Last updated at Posted at 2017-05-04

概要

『オブジェクト指向における再利用のためのデザインパターン』を読んでいたら、「クラス継承よりもオブジェクトコンポジションを多用すること。」(P.31)とあった。

「コンポジション」についてあまり分かっていなかったので調べた。

コンポジション

前述の本には、コンポジションについて下記の記述がある。

 オブジェクト指向システムにおいて、機能を再利用するためのよく知られた2つの技法に、クラス継承とオブジェクトコンポジションがある。(中略)
 オブジェクトコンポジションはクラス継承の代替案である。こちらの場合は、オブジェクトをまとめる、あるいは合成することによって、より複雑な新しい機能を得ることができる。オブジェクトコンポジションは、合成の対象となるオブジェクトが的確に定義されたインタフェースを有することを必要とする。(P.30)

(コンポジションによって参照される)オブジェクトはインタフェースを通してのみアクセスされるので、カプセル化の概念を壊すことはないのだ。(中略)さらには、オブジェクトのインタフェースによってオブジェクトを実装できるので、実装依存度は低くなる。(P.31、()内引用者)

理解が正しいのかわからないのが、1つの巨大なクラスに機能を詰め込むよりも、小さな部品に分解してクラスとし、そのクラスをフィールドに持つほうが良い、という指針だと感じた。

1度巨大なクラスを作ってしまうと、その機能を再利用したいときには継承をするしかない。

だから、始めからそうならないように、分割してクラスを作っておく必要がある。

コンポジションと集約

コンポジション(composition)と集約(aggregation)は、いずれもクラス間の関連を表現する用語だが、区別がつかなくなるときがある。

『オブジェクト指向のこころ』にわかりやすい例が書いてあった。

コンポジション

保持されているものが保持しているものの一部である場合(自動車とそれを構成するエンジン等)。(P.29)

集約

独立して存在できる何かのコレクションがある場合(空港とそこに駐機されている飛行機等)(P.29)

参考文献

  • エリック ガンマ、ラルフ ジョンソン、リチャード ヘルム、ジョン プリシディース(1999)『オブジェクト指向における再利用のためのデザインパターン 改訂版』本位田 真一 / 吉田 和樹 監訳、ソフトバンククリエイティブ
  • アラン・シャロウェイ、ジェームズ・R・トロット(2014)『デザインパターンととともに学ぶ オブジェクト指向のこころ』村上雅章訳、丸善出版
27
22
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
22