1. 程式人生 > >OOP程式設計七大原則

OOP程式設計七大原則

PBP/OBP/OOP的特徵 PBP(基於過程):函式、域與生命週期的概念、函式過載、函式模板、異常處理、範型演算法。 OBP(基於物件):類(介面)、類的生命週期、類模板。 OOP(面向物件):繼承、多型。 三個概念步步深入,後者包括前者。其目的是實現軟體開發的可重用性,解決軟體危機(軟體工程思想未引入之前)。 OOP不可避免設計原則的發展與設計模式的產生,這是OOP獨具的特徵決定的(正如前面所說,特徵的產生是由其產生目的決定的)。OOP的方法論(高內聚、低耦合、易複用) OOP的方法論--如何實現基於OOP特徵的抽象?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)儘量限制區域性變數的有效範圍.