對于OO系統的設計而言,在支援可維護性的同時,提高系統的可複用性是一個至關重要的問題,如何同時提高系統的可維護性和可複用性,是OOD需要解決的核心問題之一。在OOD中,可維護性的複用是以設計原則為基礎的。常用的OOD原則包括開閉原則、裡氏替換原則、依賴倒置原則、組合/聚合複用原則、接口隔離原則和最少知識原則等。這些設計原則首先都是面向複用的原則,遵循這些設計原則可以有效地提高系統的複用性,同時提高系統的可維護性。
開閉原則是指軟體實體應對擴充開發,而對修改關閉。即對修改關閉,即盡量在不修改原有代碼的情況下進行擴充。此處的“實體”可以指一個軟體子產品,一個由多個類組成的局部結構或一個獨立的類。
裡氏替換原則是由"Barbara Liskov"提出的,其基本思想是,一個軟體實體如果使用的是一個基類對象,那麼一定适用于其子類對象,而且覺察不出基類對象和子類對象的差別,即把基類都替換成它的子類,程式的行為沒有變化。反過來則不一定成立,如果一個軟體實體使用的是一個子類對象,那麼它不一定适用于基類對象。
組合/聚合複用原則又稱為合成複用原則,是在一個新的對象中通過組合關系或聚合關系來使用一些已有的對象,使之稱為新對象的一部分,新對象通過委派調用已有對象的方法達到複用其已有功能的目的。簡單的說,就是要盡量使用組合/聚合關系,少用繼承。
依賴倒置原則是指抽象不應該依賴于細節,細節應當依賴于抽象。換言之,要針對接口程式設計,而不是針對實作程式設計。在程式代碼中傳遞參數時或在組合(或聚合)關系中,盡量引用層次高的抽象層類,即使用接口和抽象類進行變量類型聲明、參數類型聲明和方法傳回類型聲明,以及資料類型的轉換等,而不要用具體類來做這些事情。
接口隔離原則是指使用多個專門的接口,而不使用單一的總接口。每個接口應該承擔一種相對獨立的角色,不多不少,不幹不該幹的事,該幹的事都要幹。這裡的“接口”通常有兩種不同的含義,一種是指一個類型所具有的方法特征的集合,僅僅是一種邏輯上的抽象;另外一種是指某種語言具體的接口定義,有嚴格的定義和接口。
抽象類不會有執行個體,一般作為父類為子類繼承,一般包含這個系的共同屬性和方法。注意:好的繼承關系中,隻有葉節點是具體類,其他節點應該都是抽象類,也就是說具體類是不被繼承的。将盡可能多的共同代碼放到抽象類中。
最少知識原則也稱為迪米特法則(Law of Demeter),是指一個軟體實體應當盡可能少地與其他實體發生互相作用。這樣,當一個子產品修改時,就會盡量少地影響其他的子產品,擴充會相對容易。這是對軟體實體之間通信的限制,它要求限制軟體實體之間通信的寬度和深度。