面向對象設計原則之概述

  對於面向對象軟件系統的設計而言,在支持可維護性的同時,提高軟件系統的可複用性是一個至關重要額問題,如何同時提高一份軟件系統的可維護性和可複用性是面向對象設計需要解決的核心問題之一。在面向對象設計中,可維護性的複用還是以設計原則爲基礎的。每一個原則都蘊含一些面向對象設計的思想,可以從不同的角度提升一個軟件結構的設計水平。
  面向對象設計原則是學習設計模式的基礎,每一種模式都符合一種或多種面向對象設計的原則,使用這些原則達到可維護的複用,讓設計出的系統更加靈活、易於擴展。
  通常認爲,一個易於維護的系統,就是複用率高的系統;而一個複用性較好的系統,就是一個易於維護的系統。
  知名軟件大師Robert C.Martin認爲一個可維護性較低的軟件設計,通常由如下4個原因造成:
    1.過於僵硬(Rigidity):很難在一個軟件系統中添加一個新的功能,增加一個新的功能將涉及很多模塊,造成系統改動較大。
    2.過於脆弱(F人agility):與過於僵硬同時存在,修改已有的系統時代碼過於脆弱,對一個地方的修改會導致看上去沒有關係的另一個地方發生故障。
    3.複用率低(Immobility):複用是指一個軟件的組成部分可以在同一個項目中的不同地方甚至是不同的項目中重複使用。而複用率低表示很難重用這些現有的軟件組成部分,如類、方法、子系統等,即使是重用也只是停留在簡單的複製粘貼上,甚至根本沒辦法重用,程序員寧願不斷的重複編寫一些已有的程序代碼。
    4.黏度過高(Viscosity):對系統進行改動時,有時候 可以保存系統的原始設計意圖和原始設計框架,有時候可以破壞原始設計意圖和原始設計框架,前者對系統的擴展更有利,應該儘量按照前者來進行改動。如果採用後者比前者更容易則稱爲系統的黏度過高,黏度過高將導致程序員採用錯誤的代碼維護方案。
  那麼這樣的系統纔算一個好的設計,纔是一個複用性較高的設計呢?軟件工程和建模大師Peter Coad認爲,一個好的系統設計應該具備如下三個性質:
    1.可擴展性(Extensibility):容易將新的功能添加到現有的系統中,與“過於僵硬“相對應。
    2.靈活性(Flexibility):代碼修改時不會波及很多其他模塊,與”過於脆弱“項對應。
    3.可插入性(Pluggability):可以很方便地將一個類抽取出去,同時將另一個有相同接口的類添加進來,與”黏度過高“相對應。
  軟件的複用或常用擁有衆多優點,如可以提高軟件的開發效率,提高軟件質量,節約成本,恰當的複用還可以改善系統的可維護性。
  面向對象設計複用的目標在於實現支持可維護性的複用,如在JAVA這樣的語言中,可以通過面向對象技術中的抽象、繼承、封裝和多態等特性來實現更高層次的可複用性。通過抽象和繼承使得類的定義可以複用,通過多態使得類的實現可以複用,通過抽象和封裝可以保持和促進系統的可維護性。在面向對象的設計裏面,可維護性複用都是以面向對象設計原則爲基礎的,這些設計原則首先都是複用的原則,遵循這些原則可以有效的提高系統的複用性,同時提高系統的可維護性。
  常用的面向對象的設計原則包括如下7個:單一職責原則(Single Responsibility Principle,SRP)、開-閉原則(Open-Close Principle,OCP)、里氏代換原則(Liskov Substituition Principle,LSP)、依賴倒換原則(Dependence Inversion Principle,DIP),接口隔離原則(Interface Segregation Principle,ISP)、合成複用原則(Composition Reuse Principle,CRP)、迪米特法則(Law of Demeter,LoD)。這些原則並不是孤立存在的,它們相互依賴,相互補充。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章