概覽
系統(tǒng)開發(fā)過程中情妖,最難的不是完成系統(tǒng)的開發(fā)工作蹄衷,而是在于后續(xù)的升級正歼、維護過程中讓系統(tǒng)能夠擁抱變化。擁抱變化也就意味著在滿足需求且不破壞系統(tǒng)穩(wěn)定性的前提下保持高可擴展性力穗、高內聚毅弧、低耦合,經歷各版本的變更之后依然保持清晰当窗、靈活够坐、穩(wěn)定的系統(tǒng)架構。當然崖面,這是比較理想的情況元咙,但我們必須朝著這個方向去努力,那么遵循面向對象六大原則就是我們走向靈活軟件之路所邁出的第一步嘶朱。
軟件的可維護性和可復用性。
好的系統(tǒng)設計應該具備如下三個性質:
- 可擴展性(Extensibility)
- 靈活性(Flexibility)
- 可插入性(Pluggability)
可維護性較低的系統(tǒng)設計光酣,通常有如下幾個原因:
- 復用率低(Immobility)
- 黏度過高(Viscosity)
- 脆弱
- 僵硬
面向對象設計原則
常用的面向對象設計原則并不是孤立存在的疏遏,它們相互依賴,相互補充救军。
- 開閉原則
- 依賴倒置原則
- 里氏替換原則
- 單一職責原則
- 接口隔離原則
- 迪米特原則
開閉原則(OCP)
Open Close Principle财异,縮寫OCP。開閉原則由Bertrand Meyer(勃蘭特·梅耶)于1988年出版的《面向對象軟件構造》一書中提出唱遭。抽象化是開閉原則的關鍵戳寸。
定義:軟件中的對象(類、模塊拷泽、函數等)應該對于擴展是開放的疫鹊,對于修改是封閉的袖瞻。
軟件開發(fā)過程中,最不會變化的就是變化本事拆吆。
依賴倒置原則(DIP)
Dependence Inversion Principle聋迎,縮寫DIP。
定義:依賴倒置原則指代了一種特定的解耦形式枣耀,使得高層次的模塊不依賴于低層次模塊的實現細節(jié)的目的霉晕,依賴模塊被顛倒了。
- 高層模塊不應該依賴低層模塊捞奕,兩者都應該依賴其抽象
- 抽象不應該依賴細節(jié)
- 細節(jié)應該依賴抽象
java語言中牺堰,抽象就是指接口或抽象類,兩者都不可以直接被實例化颅围;細節(jié)就是實現類伟葫。高層模塊就是調用端,低層模塊就是具體實現類谷浅。
里氏替換原則(LSP)
Liskov Substitution Principle扒俯,縮寫LSP。
定義:所有引用基類的地方必須能透明地使用其子類的對象一疯。
單一職責原則(SRP)
Single Responsibility Principle撼玄,縮寫SRP。
定義:就一個類而言墩邀,應該僅有一個引起它變化的原因掌猛。
接口隔離原則(ISP)
InterfaceSegregation Principles,縮寫ISP眉睹。
定義:客戶端不應該依賴它不需要的接口荔茬。
迪米特原則(LOD)
Law of Demeter,縮寫LOD竹海,也稱為最少知識原則慕蔚。
定義:一個對象應該對其他對象有最少的了解。
Only talk to your immedate friends斋配。只與直接的朋友通信孔飒。?艰争?坏瞄?每個對象都必然會與其他對象有耦合關系,兩個對象之間的耦合就稱為朋友關系甩卓,如依賴鸠匀、關聯(lián)、組合逾柿、聚合等缀棍。
類應該對自己需要耦合或調用的類知道得最少宅此,類的內部如何實現與調用者或依賴者沒有關系,調用者或者依賴者只需要知道它需要的方法即可睦柴,其他的可一概不用管诽凌。類與類之間關系越密切,耦合度越大坦敌,當一個類發(fā)生改變時侣诵,對另一個類的影響也越大。軟件總的原則:低耦合狱窘、高內聚杜顺。