天天看點

OOP程式設計七大原則

OCP(Open-Closed Principle),開放封閉原則:軟體實體應該擴充開放、修改封閉。

實作:合理劃分構件,一種可變性不應當散落在代碼的很多角落裡,而應當被封裝到一個對象裡;一種可變性不應當與另一個可變性混合在一起。

DIP(Dependency Inversion Principle),依賴倒置原則:擺脫面向過程程式設計思想中高層子產品依賴于低層實作,抽象依賴于具體細節。OOP中要做到的是,高層子產品不依賴于低層子產品實作,二者都依賴于抽象;抽象不依賴于具體實作細節,細節依賴于抽象。

實作:應該通過抽象耦合的方式,使具體類最大可能的僅與其抽象類(接口)發生耦合;程式在需要引用一個對象時,應當盡可能的使用抽象類型作為變量的靜态類型,這就是針對接口程式設計的含義。

LSP(Liskov Substitution Principle),Liskov替換原則:繼承思想的基礎, 即子類能替代父類使用。“隻有當衍生類可以替換掉基類,軟體機關的功能不會受到影響時,基類才真正被複用,而衍生類也才能夠在基類的基礎上增加新的行為。”

ISP(Interface Insolation Principle),接口隔離原則:用戶端不應該依賴它不需要的接口,一個類對另一個類的依賴應該建立在最小的接口上,不要引入無關因素,避免接口污染。

實作:一個類對另外一個類的依賴性應當是建立在最小的接口上的。使用多個專門的接口比使用單一的總接口要好。

SRP(Single Resposibility Principle),單一職責原則:就一個類而言,接口職責單一,應該僅有一個引起它變化的原因。 如果一個類的職責過多,就等于把這些職責耦合在一起,一個職責的變化可能會抑止這個類完成其他職責的能力。

CARP(Composite/Aggregate Reuse Principle),合成/聚合複用原則:設計模式告訴我們對象委托優于類繼承,從UML的角度講,就是關聯關系優于繼承關系。盡量使用合成/聚合、盡量不使用繼承。

實作:在一個新的對象裡面使用一些已有的對象,使之成為新對象的一部分,以整合其功能。

LoD(Law Of Demeter or Principle of Least Knowledge),迪米特原則或最少知識原則:就是說一個對象應當對其他對象盡可能少的了解,依賴越少越好。即隻直接與朋友通信,或者通過朋友與陌生人通信。

朋友的定義(或關系):

(1)目前對象本身。

(2)以參量的形式傳入到目前對象方法中的對象。

(3)目前對象的執行個體變量直接引用的對象。

(4)目前對象的執行個體變量如果是一個聚集,那麼聚集中的元素也都是朋友。

(5)目前對象所建立的對象。

實作:

(1)在類的劃分上,應當建立有弱耦合的類。類之間的耦合越弱,就越有利于複用。

(2)在類的結構設計上,每一個類都應當盡量降低成員的通路權限。一個類不應當public自己的屬性,而應當提供取值和指派的方法讓外界間接通路自己的屬性。

(3)在類的設計上,隻要有可能,一個類應當設計成不變類。

(4)在對其它對象的引用上,一個類對其它對象的引用應該降到最低。

(5)盡量限制局部變量的有效範圍.  

總結:

組合優先、繼承其次。具體依賴抽象,無論高層、底層。職責單一、依賴單純、高内聚、低耦合。