學習目標
了解面向對象七大原則基本概念。
在之后實踐應用中,要給予七大原則去設計程序。
為什么有七大原則
七大原則總體要實現的目標是:
高內聚、低耦合。
使程序模塊的可重復性、移植性增強。
高內聚低耦合
從類角度來看,高內聚低耦合:
減少類內部,對其他類的調用。
從功能塊來看,高內聚低耦合:
減少模塊之間的交互復雜度。
七大原則
單一職責原則、開閉原則、里氏替換原則、依賴倒轉原則、迪米特原則、接口隔離原則、合成復用原則。
單一職責原則
SRP(Singal?Responsibility?Principe)
類被修改的幾率很大,因此應該專注于單一的功能。如果把多個功能放在同一個類中,功能之間就形成了關聯,改變其中一個功能,有可能終止另一個功能。
舉例:假設程序、策劃、美術三個工種是三個類,他們應該各司其職,在程序世界中只應該做自己應該做的事情。
開閉原則
OCP(Open-Closed?Principe)
對拓展開發,對修改關閉。
拓展開發:模塊的行為可以被拓展從而滿足新的要求。
修改關閉:不予許修改模塊的源代碼(或者盡量使修改最小化)。
舉例:繼承就是最典型的開閉原則的體現,可以通過添加新的子類和重寫父類的方法來實現。
里氏替換原則
LSP(Liskov?Substitution?Principle)
任何父類出現的地方,子類都有可以替代。
舉例:用弗雷容器裝載子類對象,因為子類對象包含了父類的所有內容。
依賴倒轉原則
DIP(Dependence?Inversion?Principle)
要依賴于抽象,不要依賴于具體的實現
迪米特原則
LoP(Law?of?Demeter)
又稱最少知識原則
一個對象應當對其他對象盡可能少的了解,不要和陌生人說話。
舉例:一個對象中的成員,要進克少的和其它類建立關系,目的是降低耦合性。
?接口分類原則
ISP(Interface?Segregation?Principle)
不應該強迫別人以來他們不需要使用的方法。
一個接口不需要提供太多的行為,一個接口應該金蓮只提供一個對外的功能,讓別人去選擇需要實現什么樣的行為,而不是把所有的行為都封裝到一個接口當中。
舉例:飛行接口、走路接口、跑步接口等等雖然都是移動的行為,但是我們應該把他們分為一個一個單獨的接口,讓別人去選擇使用。
合成復用原則
CRP(Composite?Reuse?Principle)
盡量使用對象組合,而不是繼承來達到復用的目的。
繼承關系是強耦合,組合關系是低耦合。
舉例:臉應該是眼睛、鼻子、嘴巴、耳朵的組合,而不是一次的繼承;角色和裝備也應該是組合,而不是繼承。
注意:不能盲目的使用合成復用原則,要在遵循迪米特原則的前提下。
總結
七大原則
單一職責原則:一個類只處理自己應該處理的內容,不應該啥都寫在一起。
開閉原則:對拓展開放,對修改關閉。新加功能盡量是加處理而不是改代碼。
里氏替換原則:任何地方子類都能替代父類,父類容器裝子類。
依賴倒轉原則:不要依賴具體的實現,要依賴抽象(接口)。
迪米特原則:一個類要盡量減少對別的類的了解,盡量少用別的類和自己關聯。
接口隔離原則:一個接口一個行為,不要一個接口n個行為。
合成復用原則:除非設計上需要繼承,否則盡量用組合復用的形式。
如何使用這些原則
在開始做項目之前,整理UML類圖時,先按照自己的想法把需要的類整理出來,基于七大原則去優化整理自己的設計。
整體目標是:高內聚,低耦合。