軟件:
性質:可維護性,可複用性
認知:
可維護性與可複用性是相對獨立的概念,對於面向對象的軟件系統設計來講,在支持可維護性的同時,提高系統的可複用性是一個核心問題算法
可維護性:
軟件的維護就是軟件的再生,一個好的軟件設計,必須可以容許新的設計要求以較爲容易和平穩的方式加入到已有的系統中去,從而使這個系統可以不斷煥發青春。設計模式
一個可維護性好的系統,容許維護工做可以以容易、準確、安全、經濟的形式進行。
緣由:
過於僵硬:沒法加入新的性能
過於脆弱:修改一段代碼會引起其餘地方的變化
複用率低:代碼的粘稠性過高,沒法複用
黏度太高:保存原始設計與破壞原始設計
設計目標:
可擴展性:新的性能很容易加入到系統上去(過於僵硬)
靈活性:代碼修改平穩進行,不會產生較大影響(過於脆弱)
可插入性:很容易將一個類抽出去,同時將其餘的有一樣的接口的類 加入進來(黏度太高)
安全
可複用性:
傳統的複用:
代碼的剪貼複用:
算法的複用:
數據結構的複用:
缺陷:複用是以破壞可維護性爲代價的數據結構
面向對象設計複用:
數據的抽象化和繼承關係使得概念和定義能夠複用
多態性使得實現和應用能夠複用
抽象化和封裝能夠保持和促進系統的可維護性性能
複用的焦點不在集中在具體實現細節上,而集中在最重要的含有宏觀商業邏輯的抽象層次上
抽象層次是提升複用性的同時提升可維護性的關鍵設計
抽象層次模塊獨立與具體模塊,具體模塊內部的變化不會影響抽象層次的結構,抽象層次的複用會變得簡單對象
當一個軟件系統是一個複用有道,易於維護的系統時,將新的性能加入到系統中去,或對一個已有的性能進行修改不是一件困難的事情繼承
可維護性複用是以設計原則和設計模式爲基礎的接口
設計原則:
1.「開閉原則」:軟件實體應該對擴展開放,對修改關閉
特徵:
經過擴展已有的系統,能夠提供新的行爲,以知足對軟 件的新需求,使系統具備必定的適應性和靈活性
已有的軟件模塊,特別是最重要的抽象模塊不能再修改 ,使變化中的系統具備必定的穩定性和延續性
核心:
抽象化:
設計預見全部可能的擴展,而定義的抽象層,容許無窮 無盡的行爲在實現層中實現基礎
對可變性的封裝原則:將系統中可變的因素,封裝起來
特徵:考慮的是什麼會發生變化
同一種可變性的不一樣表象意味着同一個繼承等級結構中的具體子類。繼承應當被看作是封裝變化的方法
一種可變性不該該與另外一種可變性混合在一塊兒
2.里氏替換:任何基類能夠出現的地方,子類必定能夠出現
基類與子類的繼承關係是抽象化的具體體現,里氏替換是對實現抽象化的具體步驟的規範
3.依賴倒轉:依賴抽象,不要依賴於實現
開閉原則是目標,依賴倒轉是手段
4.合成/聚合複用:要儘可能使用合成/聚合,而不是繼承關係達到複用的目的
合成/聚合與里氏替換相輔相成,是對開閉原則的具體步驟的規範,前者要求先考慮合成/聚合關係,後者要求在使用的時候,必須肯定這個關係符合必定條件
5.迪米特:軟件實體應該與儘量少的其餘實體發生相互做用6.接口隔離:爲客戶端提供儘量小的單獨接口,而不是 提供大的總接口