[轉載]繼承(Generalization),組合(Composition),聚合(Aggregation),關聯(Association),依賴(Dependency),實現(Realization
原文連結:https://www.cnblogs.com/h-hg/p/8784232.html
類與類的關係
繼承(Generalization)
&esmp;繼承是物件導向的三大特徵之一,是一種最能體現物件導向程式碼複用的類關係,對於繼承,可以使用"is a"來表示,比如,小轎車(類B)"is a"車(類A),是對車(類A)的進一步刻畫,那麼這兩個類就是"繼承"關係。
class Goose : public Bird{
//子類擴充套件屬性和方法
};
組合(Composition)
&esmp;組合是將一個物件(部分)放到另一個物件裡(組合)。它是一種 "has-a" 的關係。相比"聚合",組合是一種強所屬關係,組合關係的兩個物件往往具有相同的生命週期,被組合的物件是在組合物件建立的同時或者建立之後建立,在組合物件銷燬之前銷燬。一般來說被組合物件不能脫離組合物件獨立存在,而且也只能屬於一個組合物件。比如,鳥類和翅膀類就是組合關係,在建立一個鳥類物件時,一定要同時或之後建立一個翅膀類物件,銷燬一個鳥類物件時,一定要先同時或之前銷燬翅膀物件。
&esmp;在C++語法中,使用在一個類中包含另外一個類型別的成員來實現組合。
class Wing{
};
class Bird{
Wing wing;
};
聚合(Aggregation)
&esmp;聚合是一種弱所屬關係,比如一隻大雁和雁群,就是一種"聚合"關係。和組合相比,被聚合的物件可以屬於多個聚合物件,比如,一隻大雁可能屬於多個雁群。
&esmp;在C++語法中,通過類的指標來實現聚合
class Goose{
};
class Geese{
public:
Goose member[10];
};
關聯(Association)
關聯也是一種弱關係,但並不是從屬關係,關聯的連個的類可以看作是平等的,比如一隻大雁和老鷹的關係,就可以看作關聯關係
&esmp;C++中,通過定義其他類指標型別的成員來實現關聯,下面是雙向關聯的實現方法
class Egle{
class Goose *food;
};
class Goose{
class Egle *predator;
};
依賴(Dependency)
一個物件的某種行為依賴於另一個類,比如,大雁的遷徙行為受季節影響,那麼,大雁和季節就會有"依賴"關係。
C++語法中,通過將一個類作為另一類方法的引數的形式實現兩個類之間的依賴關係
class Season{
};
class Goose{
public:
void Migrate(Season season); //或Migrate(Season *season)、Migrate(Season &season)
};
實現(Realization)
實現對應的是物件導向中的"介面",即動物都要移動,但是每種移動的方式不一樣,鳥要實現自己獨有的移動的方法。
&esmp;在C++中,介面通過的純虛擬函式來實現,C++的多型就是通過虛擬函式來實現的。
class Animal{
public:
vitual void move();
};
class Bird: public Animal{
void move(){
//鳥的移動方式,飛
}
};
相關文章
- UML關係(泛化,實現,依賴,關聯(聚合,組合))
- 學習UML實現、泛化、依賴、關聯、聚合、組合
- java的類之間的關係:泛化、依賴、關聯、實現、聚合、組合Java
- JAVA面試題之UML泛化、實現、依賴、關聯、組合、聚合書目錄Java面試題
- UML-類圖-Composition(組合)和Aggregation(聚合)的區別
- 用C++程式碼描繪UML中的 關聯 依賴 組合 聚合 泛化C++
- 談一談自己對依賴、關聯、聚合和組合之間區別的理解
- Scala 多繼承 & 依賴注入繼承依賴注入
- 組合,關聯,聚合的區別
- 繼承與組合繼承
- prefer 組合 to 繼承繼承
- 組合優於繼承繼承
- 【Java】繼承、抽象、組合Java繼承抽象
- js 組合繼承詳解JS繼承
- Association, Composition and Aggregation in UI5, CRM, S/4HANA and C4CUI
- 物件導向程式設計程式碼詳解(依賴關係,關聯關係,組合關係)物件程式設計
- JavaScript中的繼承和組合JavaScript繼承
- Java中的繼承與組合Java繼承
- Maven 聚合與繼承Maven繼承
- Maven聚合與繼承Maven繼承
- 【Maven】聚合和繼承Maven繼承
- Dependency Injection-依賴注入詳解依賴注入
- Docker的組合優於繼承 - frankelDocker繼承
- 類的組合與繼承——作業繼承
- YTU-OJ-繼承與組合繼承
- 依賴管理利器---Spring IO Platform解決Spring組合依賴問題實戰SpringPlatform
- Maven--繼承與聚合Maven繼承
- .Net DI(Dependency Injection)依賴注入機制依賴注入
- Laravel Dependency Injection (依賴注入) 概念詳解Laravel依賴注入
- JavaScript的繼承-轉載JavaScript繼承
- 為什麼更推薦使用組合而非繼承關係?繼承
- 【設計模式】如何用組合替代繼承設計模式繼承
- javascript組合繼承的基本原理JavaScript繼承
- prototype實現繼承繼承
- 實現JavaScript繼承JavaScript繼承
- Maven Dependency Version:依賴版本自動升級Maven
- 及其容易出錯題總結 --關於繼承組合介面等等繼承
- 使用 .NET Core 實現依賴關係注入