理解隔離變化
從巨集觀層面來看,物件導向的構建方式更能適應軟體的變化,能將變化所帶來的影響降到最小
各司其職
從微觀層面來看,物件導向的方式更強調各個類的「責任」
由於需求變化導致的新增型別不應該影響原來型別的實現------是所謂各負其責
物件是什麼?
從語言實現層面來看,物件封裝了**和資料
從規格層面講,物件是一系列可被使用的公共介面
從概念層面講,物件是某種擁有責任的抽象
依賴倒置原則(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 開始遊...