2010年5月28日金曜日

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

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

  1. class ClassA {  
  2.    
  3.     // field  
  4.      ClassB* b;  
  5.   
  6.     // destructor  
  7.     ~ClassA() {  
  8.         delete b;  
  9.     }  
  10. };  
これもコンポジションです。

  1. class ClassA {  
  2.    
  3.     // field  
  4.      ClassB* b;  
  5.   
  6.     // destructor  
  7.     ~ClassA() {  
  8.         // do nothing...  
  9.     }  
  10. };  
これは集約です。

0 件のコメント:

コメントを投稿