2011-11-10 9 views
5

クラス図を設計する際に、私は構図が「has-a」関係ですが集約は知っているから、これを理解するのは苦労していますか?私はそれが何であるか分かりません。クラス図でコンポジションを使用することはいつ知っていますか?クラス図で集計を使用することはいつ知っていますか?一例が高く評価されます。クラス図の合成と集計

答えて

21

アグリゲーションとコンポジションの主な違いは、「has-a」関係のプロパティです。それは強いか弱いかのどちらかです。

集約「has-a」関係は「弱型」です。アグリゲータのリンクされたコンポーネントは、ライフサイクル全体で存続するか、または他の方法でアクセスされる可能性があることを意味します。簡単な例としては、メンバーであるサッカークラブです。クラブが解散した場合、あなたはまだメンバーを獲得しています。実際には他のクラブのメンバーでもあり、生き続けることができます。

"has-a"関係は "strong-type"です。他者との間に存在することができないという強い意味。コンポーネントのライフサイクルは、「親」に直接リンクされています。例としては、部屋のある家があります。あなたが家を引き裂くことに決めたら、あなたも部屋を失います。

少し抽象的かもしれませんが、それはその背後にあるアイデアだと思います。

+0

私は尋ねることを忘れました、どうですか? – user962206

0

前の質問への回答を参照してください。herehereおよびhere

個人的に私は集計を使用しません。セマンティクスは弱すぎて役に立たない。それは解決するよりも多くの問題を引き起こします。簡単なバイナリアソシエーションと区別するために、明確かつ潜在的に有用なプロパティがある場所は1つだけです(脚注参照)。

合成は、不変性およびライフサイクル管理に関する重要な特性を定義しているため、有用です(上記の第1リンクを参照)。私はAggregationを使う必要がなくても何年もずっと幸せに生き延びてきました。

hth。

脚注。再帰ツリー関係をモデル化する必要がある場合は、集計を適用できます。部分は再帰的にサブパーツに分解されます。集約では、循環的な関係はないと言います。つまり、ある部分は直接的または間接的にそれ自身の下位部分になることはできません。しかし、モデルを読んでいるほとんどの人はそれを知ることはまずありません。 - コメントを追加する必要があります。つまり、バイナリアソシエーションを採用し、アグリゲーションを混乱させないようにすることもできます。