變化是復用的天敵!
物件導向設計最大的優勢在於: 抵禦變化!
• 從巨集觀層面來看,物件導向的構建方式更能適應軟體的變化,
能將變化所帶來的影響減為最小。
• 從微觀層面來看,物件導向的方式更強調各個類的「責任」 •
由於需求變化導致的新增型別不應該影響原來型別的實現——
是所謂各負其責
• 從語言實現層面來看,物件封裝了**和資料。 •
從規格層面講,物件是一系列可被使用的公共介面。 •
從概念層面講,物件是某種擁有責任的抽象。
• 高層模組(穩定)不應該依賴於低層模組(變化),二者都應該依賴
於抽象(穩定) 。
• 抽象(穩定)不應該依賴於實現細節(變化) ,實現細節應該依賴於
抽象(穩定)。
為了對抗「變化」,將穩定的頂層設計和不穩定的底層設計都依賴於(穩定的)抽象,同時也滿足了松耦合的要求。 •
對擴充套件開放,對更改封閉。 •
類模組應該是可擴充套件的,但是不可修改。
為了穩定性與相容性,不能隨意,但可以在原基礎上擴充套件。 •
乙個類應該僅有乙個引起它變化的原因。 •
變化的方向隱含著類的責任。
盡量將任務解耦,一是方便復用,二是方便管理
• 子類必須能夠替換它們的基類(is-a)。 •
繼承表達型別抽象。
子類需實現基類的抽象
• 不應該強迫客戶程式依賴它們不用的方法。 •
介面應該小而完備。
僅為客戶程式提供必要的介面 •
類繼承通常為「白箱復用」,物件組合通常為「黑箱復用」。 •
繼承在某種程度上破壞了封裝性,子類父類耦合度高。 •
而物件組合則只要求被組合的物件具有良好定義的介面,耦合
度低。
盡量使用耦合度更低的物件組合,因為類繼承時基類向子類暴露過多,且子類會依賴父類,這都是不利的。
• 使用封裝來建立物件之間的分界層,讓設計者可以在分界層的
一側進行修改,而不會對另一側產生不良的影響,從而實現層
次間的松耦合。
封裝變化點,進一步解耦合。 •
不將變數型別宣告為某個特定的具體類,而是宣告為某個介面。 •
客戶程式無需獲知物件的具體型別,只需要知道物件所具有的
介面。 •
減少系統中各部分的依賴關係,從而實現「高內聚、松耦合」
的型別設計方案。
介面的規範化代表了這個行業的興旺程度,因此一切以介面為第一位。
1. 設計習語 design idioms
design idioms 描述與特定程式語言相關的低層模式,技巧,
慣用法。
2. 設計模式 design patterns
design patterns主要描述的是「類與相互通訊的物件之間的組
織關係,包括它們的角色、職責、協作方式等方面。
3. 架構模式 architectural patterns
architectural patterns描述系統中與基本結構組織關係密切的
高層模式,包括子系統劃分,職責,以及如何組織它們之間關
系的規則。
物件導向八大設計原則
目的是使程式更加靈活 開 閉原則 目標 總的指導思想 open closed principle 對擴充套件開放,對修改關閉。增加新功能,不改變原有 類的單一職責 乙個類的定義 single responsibility principle 乙個類有且只有乙個改變它的原因。適用於基礎類,不適用基於基...
物件導向八大設計原則
1 依賴倒置模式 dip 穩定不依賴於變化,提出了抽象類。2 開放封閉原則 ocp 對擴充套件開放,對更改封閉 類模組應該是可擴充套件,不可修改的 3 單一職責原則 srp 類裡面不要放太多的成員,這代表這個類裡面隱含了多個責任。4 liskov替換原則 lsp 5介面隔離原則 isp 介面應該小而...
設計模式 八大設計原則
1.依賴倒置原則 dip 1 高層模組 穩定 不應該依賴於低層模組 變化 二者都應該依賴於抽象 穩定 2 抽象 穩定 不應該依賴於實現細節 變化 實現細節應該依賴於抽象 穩定 這裡 抽象 指的是抽象基類,實現細節 是指子類,低層模組繼承於抽象類,抽象類為高層模組提供低層模組的介面。2.開放封閉原則 ...