UMLの強い集約(コンポジション)と弱い集約(アグリゲーション)

UML(Unified Modeling Language)におけるコンポジション(Composition)は、クラスやオブジェクト間の関係を表現するための概念の一つです。

強い集約

コンポジションは、強い所有関係を表現するために使用されます。一つのクラス(親クラスやコンテナクラスと呼ばれることもあります)が他のクラス(子クラスや部品クラスと呼ばれることもあります)を所有し、所有されているクラスのライフサイクルが所有者のライフサイクルに依存している場合に使われます。つまり、所有者が破棄されると所有されているクラスも同様に破棄されます。

コンポジションは、UML上では通常、所有者クラス側から所有されるクラスへの直線と、所有者クラスと所有されるクラスの間に実心線(ダイヤモンド)を持つ矢印で表現されます。実心線は「整体性(Whole-Part)」の関係を意味し、所有者クラスが所有されるクラスを含んでいることを示します。

例えば、自動車クラスとエンジンクラスの関係を考えてみましょう。自動車はエンジンを所有しており、自動車が破棄されると同時にエンジンも破棄されます。この場合、自動車クラスが所有者クラスであり、エンジンクラスが所有されるクラスです。この関係はコンポジションで表現されます。

コンポジションは、部品と全体の間の強い関連性を表現するために使われます。部品は所有者に固有であり、他の所有者との関係がない場合に適しています。また、コンポジションは階層的な関係を持つこともあり、部品がさらに別の部品を所有する場合もあります。

したがって、コンポジションは、オブジェクト指向の設計やモデリングにおいて、クラス間の所有関係を明確にするために使用される重要な概念です。

弱い集約

UML(Unified Modeling Language)におけるアグリゲーション(Aggregation)は、クラスやオブジェクト間の関係を表現するための概念の一つです。

アグリゲーションは、弱い所有関係を表現するために使用されます。一つのクラス(親クラスやコンテナクラスと呼ばれることもあります)が他のクラス(子クラスや部品クラスと呼ばれることもあります)を所有しているが、所有されているクラスのライフサイクルが所有者のライフサイクルに依存していない場合に使われます。つまり、所有者が破棄されても所有されているクラスは独立して存在することができます。

アグリゲーションは、UML上では通常、所有者クラス側から所有されるクラスへの普通の直線と、所有者クラスと所有されるクラスの間に空心線(ダイヤモンド)を持つ矢印で表現されます。空心線は「集約(Part-Of)」の関係を意味し、所有者クラスが所有されるクラスを含んでいることを示します。

例えば、建物クラスと部屋クラスの関係を考えてみましょう。建物は部屋を所有していますが、建物が破棄されても部屋は存在し続けることができます。この場合、建物クラスが所有者クラスであり、部屋クラスが所有されるクラスです。この関係はアグリゲーションで表現されます。

アグリゲーションは、部品と全体の間の弱い関連性を表現するために使われます。部品は所有者に固有ではなく、他の所有者とも関連する場合があります。また、アグリゲーションは階層的な関係を持つこともあり、部品がさらに別の部品を所有する場合もあります。

したがって、アグリゲーションは、オブジェクト指向の設計やモデリングにおいて、クラス間の所有関係を明確にするために使用される重要な概念です。ただし、アグリゲーションとコンポジションは似ていますが、所有されるオブジェクトのライフサイクルの依存度合いに違いがあります。

設計

Posted by hidepon