[轉載]繼承(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-類圖-Composition(組合)和Aggregation(聚合)的區別
- Association, Composition and Aggregation in UI5, CRM, S/4HANA and C4CUI
- prefer 組合 to 繼承繼承
- 組合優於繼承繼承
- 【Java】繼承、抽象、組合Java繼承抽象
- js 組合繼承詳解JS繼承
- JavaScript的繼承-轉載JavaScript繼承
- Dependency Injection-依賴注入詳解依賴注入
- Maven 聚合與繼承Maven繼承
- 物件導向程式設計程式碼詳解(依賴關係,關聯關係,組合關係)物件程式設計
- 依賴管理利器---Spring IO Platform解決Spring組合依賴問題實戰SpringPlatform
- JavaScript中的繼承和組合JavaScript繼承
- .Net DI(Dependency Injection)依賴注入機制依賴注入
- Docker的組合優於繼承 - frankelDocker繼承
- 類的組合與繼承——作業繼承
- Spring裡面xml檔案中bean的依賴和繼承SpringXMLBean繼承
- 為什麼更推薦使用組合而非繼承關係?繼承
- prototype實現繼承繼承
- 實現JavaScript繼承JavaScript繼承
- Spring框架模組依賴關係Spring框架
- 關於Golang中的依賴注入實現Golang依賴注入
- Maven Dependency Version:依賴版本自動升級Maven
- python物件導向的繼承-組合-02Python物件繼承
- 【設計模式】如何用組合替代繼承設計模式繼承
- javascript組合繼承的基本原理JavaScript繼承
- Maven中dependency和plugins的繼承與約束MavenPlugin繼承
- 實驗4 類的組合、繼承、模板類、標準庫繼承
- 實驗四 類的組合、繼承、模板類、標準庫繼承
- 實驗四 類的組合,繼承,模板類,標準庫繼承
- SAP Spartacus 中的依賴注入 Dependency Injection 介紹依賴注入
- 繼承的實現方式繼承
- Javascript如何實現繼承JavaScript繼承
- c++類與類的聚合(Aggregation)關係C++
- php實現依賴注入(DI)和控制反轉(IOC)PHP依賴注入
- 【JAVA】筆記(5)--- final;抽象方法;抽象類;介面;解析繼承,關聯,與實現;Java筆記抽象繼承
- 依賴注入?依賴注入是如何實現解耦的?依賴注入解耦
- 類的組合、繼承、模板類、標準庫繼承