以下の2つの図を検討してください。上の方には右端に普通の矢印があり、下の方には左端にひし形の矢印があり、右端に普通の矢印があります。すばらしい本GoFには、これら2種類の図の両方の使用法があります。
2番目のケースでひし形が何を意味するのか、そしてこれら2つのどちらがとの間のより強い関連性を与えるのCustomer
かを理解したいと思いOrder
ます。
2つのケースのいずれかで、クラスはクラスCustomer
のライフサイクルに責任がありますか?Order
以下の2つの図を検討してください。上の方には右端に普通の矢印があり、下の方には左端にひし形の矢印があり、右端に普通の矢印があります。すばらしい本GoFには、これら2種類の図の両方の使用法があります。
2番目のケースでひし形が何を意味するのか、そしてこれら2つのどちらがとの間のより強い関連性を与えるのCustomer
かを理解したいと思いOrder
ます。
2つのケースのいずれかで、クラスはクラスCustomer
のライフサイクルに責任がありますか?Order
ひし形がない場合は、単純な関連付けがあります。
ひし形が空のままの場合、それは集合体であることを意味します。この関係は、単純な関連付けよりも強力です。この場合、顧客は注文を集約します。
ひし形が黒の場合、これは、集約されたクラスが他のクラスによって集約されないため、集約よりもさらに強力な構成であることを意味します。その「寿命」は容器によって異なります。
私はそれがもう少し明確に説明されていると思います:
顧客と注文は「has-a」構成関係です。顧客が存在しなくなると、注文も存在しなくなるためです。したがって、コンテナ(顧客)とそのコンテナ内のインスタンス(注文)の間にはライフサイクルの依存関係があります。コンテナが存在しなくなると、そのすべてのインスタンスも存在しなくなります。
一方、顧客が本を持っていると言えば。この場合、「has-a」集約関係があります。なぜなら、顧客が存在しなくなった場合でも、その本は引き続き利用できるからです。
それは集約を意味します。ウィキペディアから:
UMLでは、ツリーの包含クラスの端にある中空のひし形として、包含クラスを包含クラスに接続する1本の線でグラフィカルに表されます。集合体は、意味的には拡張オブジェクトであり、多くの操作で1つの単位として扱われます。 、物理的にはいくつかの小さなオブジェクトで構成されていますが。