重新認識物件導向和物件導向的設計原則

2021-10-02 08:55:49 字數 1010 閱讀 3539

理解隔離變化

從巨集觀層面來看,物件導向的構建方式更能適應軟體的變化,能將變化所帶來的影響降到最小

各司其職

從微觀層面來看,物件導向的方式更強調各個類的「責任」

由於需求變化導致的新增型別不應該影響原來型別的實現------是所謂各負其責

物件是什麼?

從語言實現層面來看,物件封裝了**和資料

從規格層面講,物件是一系列可被使用的公共介面

從概念層面講,物件是某種擁有責任的抽象

依賴倒置原則(dip)

1. 高層模組(穩定)不應該依賴於低層模組(變化),二者都應該依賴於抽象(穩定)

2. 抽象(穩定)不應該依賴於實現細節(變化),變化細節應該依賴於抽象(穩定)

開放封閉原則(ocp)

1. 對擴充套件開放,對更改封閉

2. 類模組應該是可擴充套件的,但是不可修改的

單一職責原則(srp)

1. 乙個類應該僅有乙個引起它變化的原因

2. 變化的方向隱含著類的責任

liskov替換原則(lsp)

1. 子類必須能夠替換它們的基類(is-a)

2. 繼承表達型別抽象

介面隔離原則(isp)

1. 不應該強迫客戶程式依賴它們不用的方法

2. 介面應該小而完備

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

1. 類繼承通常為「白箱復用」,物件組合通常稱為「黑箱復用」

2. 繼承在某種程式上破壞了封裝性,子類父類耦合度高

3. 而物件組合則只要求被組合的物件具有良好定義的介面,耦合度低

封裝變化點

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

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

1. 不將變數型別宣告為某個特定的具體類,而是宣告為介面

2. 客戶程式無需獲知物件的具體型別,只需要知道物件所具有的介面

3. 減少系統中各部分的依賴關係,從而實現「高內聚,松耦合」的型別設計方案

設計模式 重新認識物件導向

從一道面試題講起.分析 第一點 顯然需要有park,floor,place三個類 第二點 每個車位 place 應有乙個in和out方法監控車輛,同時應該有乙個狀態.第三點 顯示空餘車輛的數量,這個行為應該由停車場park來實現,並且是通過每個floor的彙總 第四點 攝像頭class輸入的是乙個車...

物件和物件導向

物件字面量 1 大括號包圍的部分 2 物件的質麵量就是乙個大括號 a var obj 鍵值對 b key 健 value 值 c key可以加 可以不加 d 健值對之間用 逗號隔開,不是分號 var obj2 console.log obj2.name obj2.fu json json 是資料格式...

物件導向和面向過程

面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了。物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。例如五子棋,面向過程的設計思路就是首先分析問題的步驟 1 開始遊...