2010年5月28日金曜日

集約とコンポジションの違い

今日は集約コンポジションの違いについて書きます。
集約もコンポジションもUMLのクラス図で使われる言葉で、両方ともHAS-Aの関係を表します。記号で書くと
  • ◆-がコンポジション
  • ◇-が集約
です。HAS-Aの関係とはどういうものかというと、簡単に言えば「ClassA HAS A ClassB」をクラス図で表現した関係です。具体的に言うとClassAのメンバー変数としてClassB型の変数が宣言されている状態のことです。
さて、本題です。
  • 集約はClassA型の変数が消滅してもClassB型のメンバー変数は消滅しない
  • コンポジションはClassA型の変数が消滅したらClassB型のメンバー変数も消滅する
これが集約とコンポジションの違いで、コンポジションは運命共同体という言い方が出来ます。
class ClassA {
    // field
    ClassB b;
};
これはコンポジションです。

class ClassA {
 
    // field
     ClassB* b;

    // destructor
    ~ClassA() {
        delete b;
    }
};
これもコンポジションです。

class ClassA {
 
    // field
     ClassB* b;

    // destructor
    ~ClassA() {
        // do nothing...
    }
};
これは集約です。

0 件のコメント:

コメントを投稿