變化是復用的天敵!
物件導向設計最大的優勢在於:抵禦變化。
重新認識物件導向
理解隔離變化
從巨集觀層面來看,物件導向的構建方式更能適應軟體的變化,能將變化所帶來的影響減為最小。
各司其職
從微觀層面來看,物件導向的方式更強調各個類「責任」。
由於需求變化導致的i效能增型別不應該影響原來型別的實現----是所謂各負其責。
物件是什麼?
從語言實現層面來看,物件封裝了**和資料。
從規格層面講,物件是一系列可被使用的公共介面。
從概念層面講,物件是某種擁有責任的抽象。
物件導向設計原則(1)
依賴倒置原則(dip)
高層模組(穩定)不應依賴於低層模組(變化),二者都應該依賴於抽象(穩定)。
抽象(穩定)不應該依賴於實現細節(變化),實現細節應該依賴於抽象(穩定)。
開放封閉原則(ocp)
對擴充套件開放,對更改封閉
類模組應該是可擴充套件的,但是不可修改
單一職責原則(spr)
乙個類應該僅有乙個引起它變化的原因
變化的方向隱含著類的責任
liskov替換原則(lsp)
子類必須能夠替換他們的基類(is-a)
繼承表達型別抽象
介面隔離原則(isp)
不應該強迫客戶程式依賴他們不用的方法
介面應該繼承而完備
優先使用物件組合,而不是類繼承
類繼承通常為「白箱復用」,物件組合通常為「黑箱復用」
繼承在某種程度上破壞了封裝性,子類父類耦合度高
而物件組合則只要求被組合的物件具有良好定義的介面,耦合度低。
封裝變化點
使用封裝來建立物件之間的分解層,讓設計者可以在分界層的一側進行修改,而不會對另一側產生不良影響,從而實現層次之間的松耦合。
針對介面程式設計,而不是針對實現程式設計
不將變數型別宣告為某個特定的具體類,而是宣告為某個介面。
客戶程式無需獲知物件的具體型別,只需要知道物件所具有的介面
減少系統中各部分的依賴關係,從而實現「高內聚、低耦合」的型別設計方案。
設計模式學習筆記 物件導向設計原則
1 單一職責 乙個類只應該做一樣事情 2 開閉原則 對擴充套件開放,對修改封閉 3 黎克特制代換 以父類的名義統一進行呼叫,使用時賦以具體子類,實現多型。4 依賴倒轉 是黎克特制代換原則另一種表述。針對介面 抽象程式設計,其實也就是以父類的名義統一進行呼叫,使用時賦以具體子類,實現多型。5 介面隔離...
設計模式學習筆記 物件導向設計原則
單一職責原則定義 單一職責原則 srp single responsibility principle 又稱單一功能原則,物件導向五個基本原則 solid 之一。它規定乙個類應該只有乙個發生變化的原因。該原則由羅伯特 c 馬丁 robert c.martin 於 敏捷軟體開發 原則 模式和實踐 一書...
C 設計模式(二) 物件導向八大設計原則
變化是復用的天敵!物件導向設計最大的優勢在於 抵禦變化!從巨集觀層面來看,物件導向的構建方式更能適應軟體的變化,能將變化所帶來的影響減為最小。從微觀層面來看,物件導向的方式更強調各個類的 責任 由於需求變化導致的新增型別不應該影響原來型別的實現 是所謂各負其責 從語言實現層面來看,物件封裝了 和資料...