1.3 物件導向的準則
人們編寫軟體的目的除了使用外,另乙個目的是容易修改,否則我們就改制硬體了。所以說,變更是軟體的天
性。我們不應該限制軟體的更新,而應該適應更新,創造環境使得容易更新,甚至預計可能的變化(所以我們
才有更多的工作機會)。人們經過長期的經驗積累和研究認識到,具有可重用性和可維護性的軟體能夠很好地
適應變化。這裡,可重用性是指乙個軟體模組能否被用在很多不同場合;可維護性是指乙個軟體模組是否容易
修改,更新和擴充套件。在物件導向的實踐中,人們為了寫出具有這兩個性質的模組,總結了一些原則。下面,我
們簡略地介紹一下這些原則。值得指出的是,除了第乙個開閉原則外,其它原則主要是針對類而言的。現在,
人們又總結了一些針對包的原則,但是因為它和我們的內容沒有太多的直接關係,所以我們略去不談。有興趣
的讀者可以參閱一下相關的資料。
1.3.1 開閉原則(ocp,the open-closed principle)
開閉原則是說,所有軟體模組都應該可以擴充套件,但不可以修改。遵循這個原則的關鍵在於抽象化。我們在寫一
個模組時,不論是乙個類,還是乙個構件,都應該認真思考它的真正功能,它對其它模組的依賴性,輸入和輸
出,等等。分離出它的可變部分(例如,用介面或外部配置等),對不變部分進行封裝。這些不變部分就是這
個模組的本質。這裡需要說明的是,在對不變部分進行封裝時,我們如何定義不變的部分。在數學中,當我們
談到不變數時,總是要指明它是在什麼變化下的不變數。否則是沒有意義的,因為在一種變化下的不變數很有
可能在另一種變化下就不是不變數了。所以,當我們定義不變的部分時,首先要明確它的變化範圍。但是,在
軟體開發中,很難事先準確的知道這些變化,很多時候是憑經驗或行業知識來判斷的。所以,這個原則多多少
少帶有主觀性,更像乙個總綱而不像乙個硬性的法律條文。martin fowler 的書analysis patterns 講解了一些實
際經驗,有興趣的讀者可以參考。下面這些原則是講如何安排依賴性使得模組具有良好的封閉性,可重用性和
可維護性。
1.3.2 依賴反向原則(dip,dependency inversion principle)
依賴反向原則是說,要依賴於抽象,而不要依賴於具體。這也就是我們所說的:要針對介面程式設計,而不要針對
實現程式設計。之所以是倒置,是因為通常在開始依照需求程式設計時,我們幾乎總是依賴於具體的實現。但是,這些
具體的實現都不易適應變化,所以要抽象出一些不變的,本質的功能,把可變的留到具體的實現中去。這種抽
象的過程是前面過程的反向,例如,當我們需要寫出結果時,開始時可能會寫到檔案裡,後來可能會寫到網路
流裡,等等。抽象的結果是寫這個功能。針對介面程式設計是乙個不可能過分強調的原則。介面就像高樓大廈中層
物件導向設計的準則
1.模組化 物件就是模組 把資料結構和操作這些資料的方法緊密地結合在一起 2.抽象 過程抽象 資料抽象 類 引數化抽象 c 的 模板 3.資訊隱藏 通過物件的封裝性實現類,分離了介面與實現,支援資訊隱藏 4.弱耦合 某一部分的變化對其他部分的影響降到最低程度 耦合 乙個軟體結構內不同模組之間互連的緊...
物件導向設計準則1
物件導向設計 如前所述,分析是提取和整理使用者需求,並建立問題域精確模型的過程。設計準則 是把分析階段得到的需求轉變成符合成本和質量要求的 抽象的系統實現方案的過程。從物件導向分析到物件導向設計 ood 是乙個逐漸擴充模型的過程。或者說,物件導向設計就是用物件導向觀點建立求解域模型的過程。儘管分析和...
物件導向設計的幾條經驗準則
這段時間在看arthur j.riel的 object oriented design heuristics 於是參考總結了如下的幾條物件導向設計原則 所有資料都應隱藏在它所在類的內部。類的使用者必須依賴類的公有介面,但類不能依賴它的使用者。儘量減少類的協議中的訊息。實現所有類都理解的最基本的公有介...