c++の継承、集約、関連付け、および組合せ

2715 ワード

一、継承、関連付けと組合せ
継承と組合せはまったく異なる概念継承であり、「is-a」の関係を表し、両者の間には上下関係があり、例えば「human is a animal」(人間は動物の一種、言い換えれば動物は人間の上司)という関係を表すには、継承を用いることができる.
1
2
3
4 calss animal {}; class human : public animal  // {};
組合せと集約は、2つの平等なオブジェクト間の全体と局所の関係を表すが、この関係の緊密性の違いによって、組合せと集約に分けられる.コンビネーションは「contain-a」の関係を表し、全体と局所は同じライフサイクルを有し、言い換えれば、全体のオブジェクトが存在しなければ、局所オブジェクトも消滅する.C++では、通常、クラス全体にローカルクラスのオブジェクトをメンバーとして追加し、このような組み合わせ関係を表現します(オブジェクト全体が作成されると同時にローカルオブジェクトも作成され、オブジェクト全体が消失し、ローカルオブジェクトも消失します).たとえば、私たちは「human conains a head」(人は頭を持っていて、人は生きていて、頭も生きていて、もし人が死んだら、頭はそうです)、
1
2
3
4
5
6
7 class head {}; calss human { private :      head h;  // }
集約は同様に全体と局所の関係を表すが、この関係はずっと緩やかで、「has-a」の関係を表しており、全体と局所はそれぞれのライフサイクルを持ち、両者は単独で存在し、互いに独立し、組み合わせのように両者は互いに依存していないが、両者も集約して新しいタイプを形成することができる.例えば、私たちは「human has a computer」と言います(人は1台のパソコンを持っていて、パソコンと人はそれぞれ独立していて、両者が集まって、「パソコンを持っている人」になります).C++では、通常、全体のクラスに局所クラスを指すポインタを入れます.このような「集約」関係(全体オブジェクトが作成されるとき、必ずしも局所オブジェクトがあるとは限らず、すでに作成されているかもしれないし、まだ存在していないかもしれないが、全体オブジェクトが消えても、局所オブジェクトが存在し続けるかもしれないし、消えてしまうかもしれない.コンピュータと人間の関係を想像してみると、生は持ってこないし、死は持って行かない).
1
2
3
4
5
6
7
8 calss computer {}; class human { /// ... private :      computer* pCom; // };
まとめると、継承表現は上下関係(is-a)であり、集約表現は緩やかな全体と局所関係(has-a)であり、組み合わせ表現は緊密な全体局所関係(contain-a)である.
さらに、
class A { private: B* p_b; }
A::A() { p_b=new B; } A::~A() { delete p_b; }
AとBの関係は組み合わせです.ですが
ポインタで表すのは、依然として組合せ関係です.
コンビネーションなのか集約なのか、その実現形態(メンバーであるかポインタであるか)は判断基準ではなく、両者のライフサイクルの違いこそ判断基準である.両方のライフサイクルは同じで、メンバー変数などの組み合わせで、ここではポインタで実現しますが、ライフサイクルが異なるのが集約です.二、関連と集約
関連と集約の違いは主に意味的に、関連する2つのオブジェクトの間には一般的に平等です.例えば、あなたは私の友达で、集約は一般的に平等ではありません.例えば、1つの会社には多くの従業員が含まれていますが、実際には差は多くありません.
集約と組合せの違いは、意味と実装に違いがあり、組合せられた2つのオブジェクトの間にはライフサイクルが大きく関連しており、組合せられたオブジェクトは、組合せオブジェクトが作成されると同時に作成されるか、または作成された後に作成され、組合せオブジェクトが破棄される前に破棄されます.一般的に、結合されたオブジェクトは、結合されたオブジェクトから独立して存在することはできません.また、1つのドキュメントのバージョンなど、1つの結合されたオブジェクトに属することもできます.ドキュメントの存在に依存する必要があります.また、1つのドキュメントに属することもできます.
集約は異なり、集約されたオブジェクトは複数の集約オブジェクトに属することができます.たとえば、従業員が複数の会社に属することができます.
通俗的な例を挙げたいです.あなたとあなたの心臓の間はcomposition関係(心臓は自分だけ)あなたとあなたが買った本の間はaggregation関係(本は他の人かもしれません)あなたとあなたの友达の間はassociation関係です