繼承和組合的適用場景總結
首先需要了解繼承和組合兩者各自的概念和特點
一、繼承
簡單來說,A類繼承B類,說明A是B的一種,A在B的基礎上做擴充套件,A能使用B中的除私有成員外的所有元素和方法,且由A派生的其他類最後可通過B類容器儲存呼叫,實現不同派生類的虛函方法。
舉例來說,人是基類,小孩是人的派生類,大人也是人的派生類,人類中的走是一個虛擬函式,小孩中的走是爬著走,大人是兩條腿走,小孩和大人這兩個派生類都屬於人,都需要走路,只是走路的方式不同,我們就可以用繼承來實現。
二、組合類
組合類就像是有許多零件組建成一臺能工作的機器,零件為機器提供功能,但又不只屬於這臺機器,只是它的一個部分,所以機器不能從零件中派生出來,只能組合起來。
需要注意,組合類中的建構函式需要使用初始化連結串列方式去初始化。
三、繼承的優點和缺點
優點
容易進行新的實現,因為其大多數可從基類繼承而來。
易於修改或擴充套件那些被複用的方法。
建立子類的物件時,無須建立父類的物件
缺點
破壞封裝,子類與父類之間緊密耦合,子類依賴於父類的實現,子類缺乏獨立性
“白盒”複用,因為父類的內部細節對於子類而言通常是可見的。
支援擴充套件,但是往往以增加系統結構的複雜度為代價
不支援動態繼承。在執行時,子類無法選擇不同的父類
子類不能改變父類的介面,但子類可以覆蓋父類的介面
四、組合類的優點和缺點
優點
容器類僅能通過被包含物件的介面來對其進行訪問。
“黑盒”複用,因為被包含物件的內部細節對外是不可見。 封裝性好。
實現上的相互依賴性比較小。
每一個類只專注於一項任務。
通過獲取指向其它的具有相同型別的物件引用,可以在執行期間動態地定義(物件的)組合。
缺點
整體類不能自動獲得和區域性類同樣的介面
建立整體類的物件時,需要建立所有區域性類的物件
五、繼承和組合的適用場景
繼承體現的是一種專門化的概念而組合則是一種組裝的概念
另外確定是組合還是繼承,最清楚的方法之一就是詢問是否需要新類向上對映,也就是說當我們想重用原型別作為新型別的內部實現的話,我們最好自己組合,如果我們不僅想重用內部實現而且還想重用介面的話,那就用繼承。
六、規則
一般對於大型程式來說,優先使用組合,組合還有一個優點就是有助於保持每個類被封裝,並被集中在單個任務上(類設計的單一原則)。這樣類的層次結構不會擴大,一般不會出現不可控的龐然大類。而類的繼承就可能出來這些問題,所以一般編碼規範都要求類的層次結構不要超過3層。但具體使用還是需要看適用場景和需求靈活去運用。
相關推薦
MongoDB適用和不適用場景總結
MongoDB 的主要目標是在鍵/值儲存方式(提供了高效能和高度伸縮性)和傳統的RDBMS 系統(具有豐富的功能)之間架起一座橋樑,它集兩者的優勢於一身。 根據官方網站的描述,Mongo 適用於以下場景。 ● 網站資料:Mongo 非常適合實時的插入,更新與查詢,並具備網站
memcache適用和不適用場景總結
適用memcached的業務場景: 1)如果網站包含了訪問量很大的動態網頁,因而資料庫的負載將會很高。由於大部分資料庫請求都是讀操作,那麼memcached可以顯著地減小資料庫負載。 2)如果資料庫伺服器的負載比較低但CPU使用率很高,這時可以快取計算好的結果( comp
繼承和組合的適用場景總結
首先需要了解繼承和組合兩者各自的概念和特點 一、繼承 簡單來說,A類繼承B類,說明A是B的一種,A在B的基礎上做擴充套件,A能使用B中的除私有成員外的所有元素和方法,且由A派生的其他類最後可通過B類容器儲存呼叫,實現不同派生類的虛函方法。 舉例來說,人是基類,小孩是人的派生
python類繼承和組合
date 子類 read ini import class mon python write 在python3中所有類默認繼承object,凡是繼承了object的類都成為新式類,以及該子類的子類Python3中所有的類都是新式類,沒有集成object類的子類成為經典類(在
面向對象--繼承和組合
比較 指定 ret print 語言 分類 復雜 默認 __main__ 面向對象的組合用法 軟件重用的重要方式除了繼承之外還有另外一種方式,即:組合 組合指的是,在一個類中以另外一個類的對象作為數據屬性,稱為類的組合 圓環是由兩個圓組成的,圓環的面積是外面圓的面積減去內部
Python 繼承和組合 接口
evel init 接口 elf () hid col sel div #解決代碼重用的問題,減少代碼冗余 #繼承是一種什麽‘是’什麽的關系 class People: def __init__(self, name, age): # print
繼承和組合混搭的情況下,構造和析構函數的調用順序
組合 log class urn std 調用父類 parent clas 父類 繼承和組合混搭的情況下: 構造時,先調用父類的構造函數(如果父類還有父類,先執行父類的父類的構造函數,在執行父類的構造函數),再調用組合對象的構造函數,最後調用自己的構造函數;
類關系:繼承和組合
() 繼承 logs tel __init__ www. 關系圖 elf ini 1、繼承 2、組合 3、繼承和組合 在jichengandzuhe.py中 class People: def __init__(self, name, age, sex
c++繼承和組合,多型,虛擬函式(c++後期繫結的本質)
組合和繼承,實現了程式碼的可擴充套件性和相容性。 多型是在虛擬函式上得到了支援。 多型的原理,函式的呼叫繫結: 把函式的呼叫和函式體相關聯稱為捆綁。當捆綁是在程式執行之前完成的,稱為早期捆綁。c語言只支援早期繫結。晚期捆綁,物件通過自身得到類的資訊,然後找
C++中的繼承和組合區別使用
C++的“繼承”特性可以提高程式的可複用性。正因為“繼承”太有用、太容易用,才要防止亂用“繼承”。我們要給“繼承”立一些使用規則: 一、如果類A 和類B 毫不相關,不可以為了使B 的功能更多些而讓B 繼承A 的功能。 不要覺得“
繼承和組合 繼承和組合
繼承和組合 一、組合 組合:組合指的是,在一個類中以另外一個類的物件(也就是例項)作為資料屬性,稱為類的組合 也就是說:一個類的屬性是另一個類的物件
Android之IPC程序通訊方案適用場景總結
IPC是 Inter-Proscess Communication的縮寫,含義為程序間的通訊或者跨程序通訊,是指兩個程序之間進行資料交換的過程。 名稱 優點 缺點 適用場景 Bundle 簡單易用 只能傳輸Bundle支援的資料型別 四大元件間的
JavaScript原型、閉包、繼承和原型鏈等等總結
幾年之前學習過Javascript,當時學得比較淺顯,現在又開始學了,發現Javascript其實挺難的,有些地方還是得花時間去理解的,於是看了很多的視訊和部落格,自己在這裡小小的總結下。。。 1.一切(引用型別)都是物件,物件是屬性的集合。 undefined
java繼承和組合
要實現的目標:鳥(Bird)和狼(Wolf)都是動物(Animal),動物都有心跳(beat()),會呼吸(beat()),但是鳥會fly(fly()),狼會奔跑(run()),用java程式實現以上描述。 InheritTest.java 使用繼承方式實現目標Compos
mongodb基礎(MongoDB 的應用場景和不適用場景)
1.適用場景 對於MongoDB實際應用來講,是否使用MongoDB需要根據專案的特定特點進行甄別,這就需要我們對MongoDB適用和不適用的場景有一定的瞭解。 根據MongoDB 官網的說明,MongoDB 的適用場景如下: 1.網站實時資料:mongoDB非常適合實時的插入,更新
java 常用集合list與Set、Map區別及適用場景總結
轉載請備註出自於:http://blog.csdn.net/qq_22118507/article/details/51576319 list與Set、Map區別及適用場景 1、List,Set都是繼承自Collection介面,Map則不是 2
四類NoSQL資料庫適用場景總結
鍵值資料庫 適用案例 現在講幾個適合使用鍵值資料庫的情況。 1 存觸會話資訊 通常來說,每一次網路會話都是唯一的,所以分配給它們的session id 值也各不相同。如果應用程式原來要把session id 存在磁碟上或關係型資料庫中,那麼將其遷移到鍵值資料庫之後, 會獲益
TiDB適用和不適用場景
TiDB 的典型的應用場景是:(1) 原業務的 MySQL 的業務遇到單機容量或者效能瓶頸時,可以考慮使用 TiDB 無縫替換 MySQL。TiDB 可以提供如下特性:吞吐量、儲存和計算能力的水平擴充套件水平伸縮時不停服務強一致性分散式 ACID 事務(2) 大資料量下,My
none 和 host 網絡的適用場景 - 每天5分鐘玩轉 Docker 容器技術(31)
docker 教程 容器 本章開始討論 Docker 網絡。我們會首先學習 Docker 提供的幾種原生網絡,以及如何創建自定義網絡。然後探討容器之間如何通信,以及容器與外界如何交互。Docker 網絡從覆蓋範圍可分為單個 host 上的容器網絡和跨多個 host 的網絡,本章重點討論前一種。對於
[Go] sync.Pool 的實現原理 和 適用場景
臨時 digg 簡單的 設置 com 運行 之前 結果 官方文檔 摘錄一: Go 1.3 的 sync 包中加入一個新特性:Pool。 官方文檔可以看這裏 http://golang.org/pkg/sync/#Pool 這個類設計的目的是用來保存和復用臨時對象,以減