1. 程式人生 > >一、面向物件設計原則

一、面向物件設計原則

文章目錄


一、面向物件

1、面向物件的理解

  • 底層思維的理解:封裝 繼承 多型
  • 抽象思維的理解:隔離變化, 各司其職

2、物件的理解

  • 從語言實現層面講,物件封裝了程式碼和資料.
  • 從規格層面講,物件是一系列可被使用的公共介面
  • 從概念層面講,物件是某種擁有責任的抽象.

二、面向物件設計原則

1、依賴倒置原則(DIP)

  • 高層模組(穩定)不應該依賴低層模組(變化),兩者都應該依賴其抽象(穩定) 抽象(穩定)不應該依賴實現細節(變化)
  • 實現細節應該依賴抽象(穩定)

2、開放封閉原則(OCP)

  • 對擴充套件開放,對更改封閉
  • 類模組應該是可擴充套件的,但是不可修改

3、單一職責原則(SRP)

  • 一個類應該僅有一個引起它變化的原因
  • 變化的方向隱含著類的責任

4、Liskov替換原則(LSP)

  • 子類必須能夠替換它們的基類(IS-A)
  • 繼承表達型別抽象

5、介面隔離原則(ISP) 【此處的介面是廣義概念,可以指介面/抽象類/實體類】

  • 介面應該小而完備
  • 不應該強迫客戶程式依賴它們不用的方法

6、優先使用物件組合,而不是類繼承

  • 類繼承通常為"白箱複用",物件組合通常為"黑箱複用"
  • 繼承在某種程度上破壞了封裝性,子類父類耦合度高
  • 而物件組合則只要求被組合的物件具有良好定義的介面,耦合度低

7、封裝變化點

  • 使用封裝來建立物件之間的分界層,讓設計者可以在分界層的一側進行修改,而不會對另一側產生不良的影響,從而實現層次間的鬆耦合

8、針對介面程式設計,而不是針對實現程式設計

  • 不將變數型別宣告為某個特定的具體類,而是宣告為某個介面
  • 客戶程式無需獲知物件的具體型別,只需知道物件所具有的介面
  • 減少系統中各部分的依賴關係,從而實現"高內聚、鬆耦合"的型別設計方案

三、將設計原則提升為設計經驗

1.設計習語Design Idioms

  • 描述與特定程式語言相關的底層模式,技巧,慣用法

2.設計模式Design Patterns

  • 主要描述的是“類與相互通訊的物件之間的組織關係,包括它們的角色、職責、協作方式等方面”。(主要解決變化中的複用問題)

3.架構模式Architectural Patterns

  • 描述系統中與基本結構組織關係密切的高層模式,包括子系統劃分、職責、以及如何組織它們之間關係的規則