C++クラスとクラスの関係

2313 ワード

クラス間の関係は大きく2つに分けられ,1つは縦方向であり,もう1つは横方向である.
一、縦は継承であり、OOの3つの特徴の一つである.
UMLでは、
  • 汎化(Generalization)は、実線+中空三角形
  • として表される.
  • 実装(Realization)は、破線+中空三角形
  • として表される.
    汎化関係:子クラスが親クラスのすべての特徴と動作をどのように特化するかを指定する継承関係です.クラスとクラス間の継承関係、インタフェースとインタフェース間の継承関係を表します.一般化された関係は、子から親への指向であり、継承または実装の方法とは逆である.
    実装関係:クラスがインタフェースのすべての特徴と動作の実装であることを示すインタフェースとの関係である.
    二、横関係、UML関係によって4種類に分けられる
  • 依存(Dependency)、破線+矢印
  • 関連付け(Association)、実線+矢印
  • 重合(Aggregation)、中空菱形+実線
  • を表す
  • 組合せ(Component)は、実心菱形+実線
  • として表す.
    それらの強弱関係は、関連集約継承に依存することです.
    1.依存
    依存とは、あるオブジェクトの機能が別のオブジェクトに依存することであり、依存されるオブジェクトはツールとして使用されているだけで、参照は持たない.
    2つの相対的に独立したオブジェクトの場合、1つのオブジェクトが別のオブジェクトのインスタンスを構築したり、別のオブジェクトのサービスに依存したりする責任を負う場合、この2つのオブジェクトの間には主に依存関係が現れます.一つの使用関係、すなわち一つのクラスの実現には別のクラスの協力が必要であるため、できるだけ双方向の相互依存を使用しない.
    例えば、AがBに依存する場合、Bは局所変数、方法のパラメータ、または静的方法の呼び出しとして現れるコードレベルで表現される.
    // Car.h
    class CCar{
        // Do something
    };
    
    // Person.h
    #include "Car.h"
    class CPerson{
        void MoveFast(CCar &pCar);
    };

    2.関連付け
    関連付けとは、あるオブジェクトが長い間別のオブジェクトの参照を持っていることであり、両者の関連付けも相互に行われることが多い.関連付けられた2つのオブジェクトは、互いに強制的な制約はありません.両方が同意すれば、いつでも関係を解除したり、関連付けたりすることができます.ライフサイクルの問題では約束はありません.
    コードレベルでは、被関連クラスBがクラス属性の形で関連クラスAに現れるように表現され、関連クラスAが被関連クラスBのグローバル変数を参照している可能性もある.
  • 双方向関連とは、双方が相手の参照を持つことを意味し、相手の共通属性と方法
  • を呼び出すことができる.
  • 一方向関連付けとは、ある一方のみが他方の参照を持つことを意味し、これにより、相手を持つ者のみが相手の共通属性および方法
  • を呼び出すことができる.
  • 自身の関連付けとは、自身の参照
  • を持つことを意味する.
    //1、    
    // Husband.h
    #include "wife.h"
    class CHusband{
    public:
        CWife* pWife;
    };
    
    // Wife.h
    #include "Husband.h"
    class CWife{
    public:
        CHusband* pHuband;
    };
    
    
    //2、    
    // Husband.h
    class CHusband{
    public:
        int nMoney;
        void GoShopping();
    };
    
    // Wife.h
    #include "Husband.h"
    class CWife{
    public:
        CHusband* pHuband;
    };

    3.集約
    集約は強力なバージョンの関連付けです.それは所属関係と生命期関係を含んでいる.重合は、全体と部分との関係であり、部分は全体から離れることができ、例えば、車とタイヤは全体と部分の関係であり、タイヤは車から離れることもできる.彼らはそれぞれのライフサイクルを持つことができます.
    コードレベルで表現され、関連関係と一致し、意味レベルからしか区別できません.
    4.組み合わせ
    コンビネーションは、含まれるオブジェクトと含まれるオブジェクトのライフサイクルとの関係を直接要求する関係の中で最も強力なバージョンです.彼は同様に全体と部分の関係を体現しているが、この時全体と部分は分けることができず、全体のライフサイクルが終わることも部分のライフサイクルが終わることを意味している.例えばあなたとあなたの脳です.
    コードレベルで表現され、関連関係と一致し、意味レベルからしか区別できません.
     
    クラス間の関係(C++)、UMLクラス図とタイミング図を理解する