3.1 軟體設計的目標
在設計時首要考慮的不適形象進度,而是系統的可維護性:
(1)可擴充套件性
(2)可修改性
(3)可替換性
3.2 「開-閉」原則
「開-閉」原則指軟體實體應當對擴充套件開放,對修改關閉。
即軟體實體應該在不修改的前提下擴充套件。
設計模式的應用就是使軟體的結構在某種程度上滿足「開-閉」原則。
3.3 實現「開-閉」原則
3.3.1 面向介面程式設計
面向介面程式設計的優勢:
(1)降低程式個部分之間的耦合性,使程式模組互換成為可能。這樣客戶無須知道自己使用的物件型別,只要知道物件有客戶所需要的介面即可。而且客戶也不需要知道物件是如何實現的,只要知道定義介面的抽象類。
(2)使軟體個部分便於單元測試,通過編制與介面已知的模擬類(mock),可以很容易實現軟體個部分的單元測試。從而提高軟體的可靠性,降低錯誤率。
(3)易於實現軟體模組的互換,軟體公升級時可以只部署發生變化的部分,而不會影響其它部分。
對於設計模來說,建立型的模式的產生只是面向介面程式設計的必然結果。面向介面程式設計要求使用物件的客戶不了解物件的具體模型,客戶只能通過乙個負責例項化物件的物件--我們稱之為「工廠」--來例項化物件,而工廠物件可以在應用初始化時集中進行例項化或者在集中的模組中進行。
3.3.2 封裝變化
程式中任何可能發生變化的部分都可以封裝成為物件,包括命令、事件、屬性、演算法和狀態等。封裝變化是實現「開-閉」原則的重要手段,也是在設計中發現物件的重要途徑。因此在分析需求時,一定要注意什麼是不變化的,什麼是可能變化的,以及這些可能的變化會對封裝帶來的影響。
總之,封裝可能發生變化的部分,將可能的變化作為物件。在物件導向設計中,物件不僅是指實現中存在的事物或者可視的事物,任何可能變化的部分都是候選物件。
3.3.3 採用組合代替繼承
在某些時候通過增加子類來擴充套件功能可能出現如下的情況。
使用組合代替繼承更加合理。
3.4 物件導向的難點
最難的部分是如何發現物件和物件間進行組合。
3.5.3 通過生成子類擴充套件功能
通過生成子類擴充套件功能會有很多問題,會引起子類數量的大量增加和類層次的增加。通過物件組合技術實現功能擴充套件式更好的選擇。
相關模式:橋接模式、職責鏈模式、組合模式、裝飾模式、觀察者模式和策略模式等。
3.5.4 對物件表示或實現的依賴
如果客戶知道物件如何表示、儲存、定位或實現,那麼在物件發生變化時也可能發生變化。因此需要對客戶隱藏這些資訊。
相關模式:抽象工廠模式、橋接模式、備忘錄模式和**模式等。
物件導向軟體設計原則(二) 軟體設計的腐化
我們如何知道軟體設計的優劣呢?以下是一些拙劣設計的症狀,當軟體出現下面任何一種氣味時,就表明軟體正在腐化。僵化性 僵化是指難以對軟體進行改動,即使是簡單的改動。如果單一的改動會導致有依賴關係的模組中的連鎖改動,那麼設計就是僵化的。必須要改動的模組越多,設計就越僵化。大部分開發人員都遇到這樣的情況 他...
如何物件導向軟體設計?
軟體設計也分大小,每個軟體開發工程師都有自己的設計,下面談談自己的見解 軟體開發的相關技術更新快,之前掌握的框架如前端的jquery和與jquery相關的框架,後端springmvc,structs,hiberneate等技術都逐漸被淘汰,有些技術公升級成新的技術仍在使用。技術是第一生產率。技術更新...
物件導向軟體設計和類的設計概述
編寫程式前的設計與思考 1.分析業務,從業務流和業務規則中歸納出領域物件.這些物件一般放在src com yourname domain下.2.根據業務,考慮為領域物件提供完整的服務需要那些服務類.這些物件一般放在src com yourname service下.3.思考從輸入開始,到輸出結束,程...