集約と構成の主な違いは、集約が「has a」の関係を持つ2つのオブジェクトの間の関連付けであるのに対し、構成は所有権を記述する特殊な集約のタイプであることである。
オブジェクト指向プログラミング(OOP)は、ソフトウェア工学の主要なパラダイムです。
OOPによれば、オブジェクトは互いに通信する。
クラスはオブジェクトを作成するための設計図であり、アソシエーションは2つ以上のオブジェクトの間の接続です。
アソシエーションには、集約と合成の2種類があり、オブジェクトやクラス間の関係を記述する。
アグリゲーションとは
アグリゲーションとは、オブジェクト間の「has a」関係を記述する関連付けのことである。
例えば、教室と生徒は「has a」の関係で結ばれている。
図1:集約を用いたUMLダイアグラム
上記の教室と生徒のシナリオを考えた場合、生徒オブジェクトは教室オブジェクトに依存しない。
また、教室を破壊しても、生徒オブジェクトに影響を与えたり、破壊したりすることはない。
したがって、教室と生徒の間の関連付けは集約となる。
さらに、UML(Unified Modelling Language)は、ソフトウェアシステムの開発を支援する視覚的なモデリング言語です。
UMLでは、菱形の記号が集合体を表す。
コンポジションとは
コンポジションは、所有権を記述する特殊な集計方法です。
例を挙げると、以下のようになる。
図2:UMLダイアグラムにおけるコンポジション
上のダイアグラムでは、School オブジェクトが classroom オブジェクトを含んでいます。
Schoolオブジェクトがclassroomオブジェクトを含むので、これは集合体ですが、特殊な集合体であることがわかります。
Schoolオブジェクトを破壊すると、classroomオブジェクトも破壊されます。
したがって、これは構成であり、所有権を意味する。
UMLでは、ハイライトされた菱形の記号がコンポジションを表している。
集約と合成の違い
定義
集約は、2つのオブジェクト間の「has a」関係を記述する関連付けであるのに対し、構成は所有権を意味する最も具体的な集約のタイプです。
したがって、これが集約と構成の主な違いです。
機能性
集約では、所有するオブジェクトを破壊しても、包含するオブジェクトには影響しない。
しかし、コンポジションでは、所有するオブジェクトを破壊すると、含むオブジェクトに影響を与える。
したがって、この点も集約と構成の違いです。
UML表現
また、菱形の記号はUMLの集合を表し、ハイライトされた菱形の記号はUMLの合成を表している。
結論
OOPでは、オブジェクト同士が通信を行います。
ここで、オブジェクト間の関係はアソシエーションと呼ばれる。
オブジェクトやクラス間のアソシエーションには、集約と合成の2種類があります。
集約と構成の違いは、集約が「has a」の関係を持つ2つのオブジェクト間の関連であるのに対し、構成は所有権を記述する特殊な集約であることである。