軟體設計模式中,有很多經典模式,今天從最基本的繼承、組合、委託開始研究(inheritance、composition、delegation)。
一、繼承(inheritance)
簡單來說,繼承就是在原有類a的基礎上,新建乙個類b,不過新建的類b是在a的基礎上,繼承父類(a)的屬性以及方法。該模式是面相物件的基礎。
示例如下:
#include
using namespace std;
class people
people(string n,int a)
int getage()
};class worker:people
};
二、組合(composition)
所謂組合,是指class object中又有其他class members。比如這樣:
class cmydoc : public cdocument
;
通俗來講,組合就是將乙個龐大的整體拆開成多個小零件,每個小零件自成乙個類,最終在這個整體框架類中將這些零件類物件組合進去。
組合與繼承相比而言,繼承是類的繼承,而組合是物件的組合,這就會出現繼承行為子類可以隨意修改從父類繼承而來的行為,而組合則不能修改,更具有封裝性。其二,繼承是在編譯時刻靜態定義的,即是靜態復用,在編譯後子類和父類的關係就已經確定了。而組合這是運用於複雜的設計,它們之間的關係是在執行時候才確定的,即在對物件沒有建立執行前,整體類是不會知道自己將持有特定介面下的那個實現類。在擴充套件方面組合比整合更具有廣泛性。
因此,主流意見推薦是優先使用物件組合。
三、委託(delegation)
委託是將一部分功能分割出去完成,即委託者(delegator)將自己委託給受託者(delegatee),受託者方法中引數為委託者物件;然後委託者呼叫受託者類物件。
委託與組合的對比:
下面示例是組合
delegatea
} delegateeb
}
而下面這個才是委託:
delegatea
void
do(); {}
} delegateeb
}
對比發現,委託相比於組合,是在受託者方法中加入了委託者物件。
原文:
3 物件導向程式設計
基礎型別,如byte int bool float等 復合型別,如陣列 結構體 指標等 可以指向任意物件的型別 any型別 值語義和引用語義 物件導向,即所有具備物件導向特徵 比如成員方法 的型別 介面 type integer int func a integer less b integer b...
物件導向程式設計(3)
封裝有兩方面的含義 1 將資料和行為包裝到類物件中,在方法內部對屬性進行操作,在類物件的外部呼叫方法。無需關心方法內部的具體實現細節,從而提高了複雜度。2 在類物件內部通過訪問控制把某些屬性和方法隱藏起來,不允許在類物件的外部直接訪問,而是在類物件的內部對外提供公開的介面方法以訪問隱藏的資訊。這樣,...
物件導向 物件的組合
組合 乙個類的例項可以當做引數傳給另乙個類的例項 class school def init self,name,address self.name name self.address address class course def init self,name,price,outline,sch...