1. 程式人生 > >類之間關係描述

類之間關係描述

簡述

     在面向物件程式設計中,類之間有各種各樣的相互關係,常見的有 泛化,關聯,依賴,組合,聚合,實現。

UML類圖

詳解:

    1,泛化

      簡析:

     泛化其實就是繼承。繼承用空心三角形加實線來表示。繼承是面向物件的三大特性之一,也是類與類之間最基本的關係,繼承關係耦合度比較強。鳥類繼承動物類後,擁有類動物類的所有特性和方法,如生命,新陳代謝等,但他也有自己的獨特的特性和方法,如翅膀和下蛋,他兩的耦合度比較高,當動物類增加一個方法時,鳥類也會增加。

     如圖:

     程式碼:

//動物  
02.class Animal                      
03.{  
04.public:  
05.    void Metabolism(Oxygen oxygen, Water water);        //新陳代謝  
06.    void Multiply();                                    //繁殖  
07.public:  
08.    int m_healthPoint;                                  //生命  
09.};  
10.  
11.//鳥  
12.class Bird : public Animal  
13.{  
14.public:  
15.    Bird()                          //構造需要初始化翅膀   
16.    {  
17.        wing = new Wing;  
18.    }  
19.  
20.    void LayEggs();                 //下蛋  
21.private:  
22.    Wing *wing;                     //翅膀  
23.};

    2,關聯

      簡析:

關聯關係用實線箭頭表示,當一個類“知道”另一個類是用關聯。企鵝類想知道氣候類的變化,需要引用氣候類。

     如圖:

     程式碼:

[cpp] view plain copy

 01.//氣候  
02.class Climate  
03.{     
04.public:  
05.};  
06.  
07.//企鵝  
08.class Penguin : public Bird  
09.{  
10.private:  
11.    Climate *climate;               //氣候  
12.};  

    3,依賴

      簡析:

依賴關係用虛線箭頭表示,動物類依賴水和氧氣類才能新陳代謝。在動物類的方法 ”新陳代謝“ 中以函式引數傳入。

     如圖:

     程式碼:

[cpp] view plain copy

 01.//氧氣  
02.class Oxygen  
03.{  
04.public:  
05.};  
06.  
07.//水  
08.class Water  
09.{  
10.public:  
11.};  
12.  
13.//動物  
14.class Animal                      
15.{  
16.public:  
17.    void Metabolism(Oxygen oxygen, Water water);        //新陳代謝  
18.    void Multiply();                                    //繁殖  
19.public:  
20.    int m_healthPoint;                                  //生命  
21.};  

    4,組合

      簡析:

組合關係用實心菱形加實線箭頭表示。組合是一種強的“擁有”關係。體現類嚴格的部分整體關係,部分和整體的生命週期一樣。比如鳥和翅膀,翅膀類是鳥類的一個屬性。在能用組合實現的情況下儘量不要使用繼承

     如圖:

     程式碼:

[cpp] view plain copy

 01.//翅膀  
02.class Wing  
03.{  
04.  
05.};  
06.  
07.//鳥  
08.class Bird : public Animal  
09.{  
10.public:  
11.    Bird()                          //構造需要初始化翅膀   
12.    {  
13.        wing = new Wing;  
14.    }  
15.  
16.    void LayEggs();                 //下蛋  
17.private:  
18.    Wing *wing;                     //翅膀  
19.}; 

    5,聚合

      簡析:

     聚合關係用空心菱形加實線箭頭表示。聚合表示一種弱的 “擁有” 關係,體現的是A物件可以包含B物件,但B物件不是A物件的一部分。比如大雁和雁群。

     如圖:

     程式碼:

//大雁  
02.class WildGoose : public Bird  
03.{  
04.  
05.};  
06.  
07.//雁群  
08.class WindeGooseAggregate  
09.{  
10.private:  
11.    std::vector<WildGoose*> m_WildGoose;  //大雁陣列  
12.};