七大原則

面向對象的七大原則

  • 單一原則
    概念:就一個類而言,應該僅有一個引起它變化的原用。即一個類應該是一組相關性很高的函數、數據的封裝,而兩個完全不一樣的功能應該放在不用的類中。該原則是實現高內聚、低耦合的指導方針。

  • 開閉原則
    概念:軟件中的對象(類、模塊、函數等)應該對於擴展是開放的,但是對修改是封閉的。
    實現開閉原則的重要手段的就是“抽象”。

  • 里氏替換原則
    概念:如果對一個類型爲A的對象a1,都有類型爲B的對象b2,使得以B定義的所有程序P在所有地方的對象a1都換成b1時,程序P的行爲沒有發生變化,那麼類型B是類型A的子類型。另一種定義:所有引用基類的地方必須能透明地使用子類的對象。

    面向對象的語言的三大特性是繼承,封裝,多態,里氏替換原則就是依賴繼承和多態。

    里氏替換原則表明,所有引用基類的地方必須能透明的使用其子類的對象。通俗點講就是,只要父類能出現的地方子類就可以出現,而且替換爲子類的也不會產生錯誤和異常,使用者可能根本不需要知道是父類還是子類。但是反過來就不一定行,有子類出現的地方,父類未必就能適應。

    里氏替換原則強調子類可以擴展父類的功能,但不能改變父類原有的功能。即應該添加新的方法,而不是重寫覆蓋父類的方法。

    里氏替換原則的核心原理是抽象,而抽象依靠繼承。所以里氏替換原則是實現開閉原則的重要方式之一。

  • 依賴導致原則
    概念:高層模塊不應該依賴低層模塊,兩者都應該依賴其抽象;抽象不應該依賴細節,細節應該依賴抽象。

    抽象是指接口或抽象類;細節是指具體實現類;高層模塊是指調用端;底層模是指具體實現類。

    具體的一個體現:要求在程序代碼中傳遞參數時或關聯關係中儘量引用層次高的抽象層類,即使用接口和抽象類進行聲明參數類型聲明,方法返回類型,以及數據類型轉換等,而不使用具體類型做事情。爲了確保該原則的應用,一個具體類應該只實現接口或抽象類中聲明過的方法,而不要給出多餘方法,否則將無法調用到在子類中增加的方法。

  • 接口隔離原則
    概念:客戶端不應該依賴他不需要的接口。另一種定義是:類間的依賴關係應該建立在最小的接口上。

    這裏的接口有兩種不同的含義:
    1 )一種是指一個類型所有的方法特徵的集合,僅僅是一種邏輯上的抽象。說明這個類中的方法應該是一組相關性很高的函數、數據的封裝。
    2)另一種是某種語言定義中的接口,有嚴格的定義和結構。說明接口定義只提供客戶端需要的行爲。

  • 迪米特原則
    概念:一個對象應該對其他對象有最少的瞭解。一個類應該定對自己需要耦合或調用的類知道得最少,類的內部如何實現與調用者或依賴者沒有關係,調用者或依賴者只需要知道它需要的方法即可,其他的可一概不管用。或者只與直接的朋友通信。直接朋友有:當前對象本身(this);以參數形式傳入到當前對象方法中的對象;當前對象的成員對象;如果對象所創建的對象;如果當前對象的成員是一個集合,那麼集合的元素都是朋友。

  • 合成複用原則
    概念:優先使用對象組合,而不是通過繼承來達到複用的目的。

    繼承的缺點:
    1)繼承複用會破壞系統的封裝性,因爲繼承會將基類的實現細節暴露給子類。
    2)繼承是靜態的,在編碼時就已經確定了,不靈活。
    3)繼承只能在有限的環境中(即類必須得存在)。
    合成最大的優點就是非常靈活。

發佈了45 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章