1.軟件的可復用性
♦可復用性:復用又叫重用,是重復使用的意思。一般軟件的復用率並不高,尤其在國內。復用的好處可以得到較高的生產效率以及隨之而來的成本降低、較高的軟件質量(錯誤可以更快的被糾正)以及恰當的使用復用可以改善系統的可維護性。
♦傳統的復用:
-
代碼剪貼:最初步的復用,每塊代碼分散在各處,獨立的演變,仍需要針對每一塊修改和測試。這種復用帶來的好處很有限。
-
算法:在已有的成熟算法中選擇一個比自己重新開發一個好的多。比如排序算法,這就是算法的復用。
-
數據結構:比如隊列、棧、鏈表,在實踐中得到了大量的應用。
♦面向對象設計的復用:在OO中數據的抽象化、繼承、封裝和多態是幾個重要的語言特性,這些特性使得一個系統可以在更高的層次上提供可復用性。
- 抽象化&繼承:數據的抽象化和繼承關系使得概念和定義可以復用。
- 多態:多態性使得實現和應用可以復用。
- 抽象化&封裝:抽象化和封裝可以保持和促進系統的可維護性。
♦軟件復用的意義:
- 提高生產率:軟件復用最明顯的好處在於提高生產率,從而減少開發代價。生產率的提高不僅體現在代碼開發階段。在分析、設計及測試階段同樣可以利用重用來節省開銷。
- 減少維護代價:好的復用可以減少軟件需要維護的部分。
- 提高互操作性:復用經過檢驗的構件,減少了可能的錯誤。基於復用技術生產的軟件系統,大多使用相同的接口對外實現通信,因此系統將更為有效地實現與其他系統之間的互操作。
- 支持快速原型:可以快速構造出系統可操作的模型,以獲得用戶對系統功能的反饋。利用可復用構件可以快速有效地構造出應用程序的原型。
- 減少培訓開銷:使用一個可復用構件庫時,可以減少所需的非正式的開銷,因為其中的構件都是工程師所熟悉和精通的。
2.軟件的可維護性
♦可維護性:即維護人員對該軟件進行維護的難易程度,具體包括理解、改正、改動和改進該軟件的難易程度。軟件維護就是軟件的再生。一個好的軟件設計,必須能夠允許新的設計要求以比較容易和平穩的方式加入到已有的系統中去,從而使這個系統能夠不斷的的煥發出活力。
♦導致可維護性較低的原因:
-
過於僵硬:在系統中加入一個新的功能,不管大小都很難,不僅意味着建造一個獨立的新的模塊,而且因為這個新功能會波及很多其他模塊,最后成跨越幾個模塊的改動。
-
過於脆弱:與軟件的過於僵硬同時存在,是軟件系統在修改已有代碼時過於脆弱。對一個地方的修改,往往會導致看上去沒有什么關系的另外一個地方發生故障。
-
復用率低:所謂復用,就是指一個軟件的組成部分,可以在同一個項目的不同地方甚至另一個項目中重復使用。復用率低,指當一段代碼,函數,模塊的功能可以在新的模塊或新的系統使用,但是已有代碼依賴於其他很多東西,很難分開。
-
黏度過高:一個改動可以保存原始設計意圖和原始設計框架的方式進行,也可以以破壞原始意圖和框架進行。第一種方法對系統的未來有利,第二種辦法是權宜之計,可以解決短期的問題,但是會犧牲中長期的利益。如果一個系統中使用第二種方法比使用第一種方法容易,那么就是黏度過高。
♦支持可維護性的三個目標:可擴展性、靈活性、可插入性。
-
可擴展性:允許一個具有同樣接口的新類替代舊類,是對抽象接口的復用。客戶端依賴於抽象接口,而不是一個具體實現類,使得這個具體類可以被別的具體類替換,而不影響客戶端。這提高了系統的可擴展性。系統可擴展性由“開-閉”原則、里氏代換原則、依賴倒轉原則和組合/聚合復用原則所保證。
-
靈活性:模塊相對獨立,通信盡可能少。這樣當一個模塊修改時,對別的模塊的影響很小。系統靈活性由“開-閉”原則、迪米特法則、接口隔離原則所保證。
-
可插入性:當一部分不再滿足需要時,可以將舊的部分拔出,新的部分插入。系統可插入性由“開-閉”原則、里氏代換原則、依賴倒轉原則和組合/聚合復用原則所保證。
3.面向對象設計原則
♦同時提高一個軟件系統的可維護性和可復用性是面向對象設計需要解決的核心問題之一。面向對象設計原則為支持可維護性復用而誕生,這些原則蘊含在很多設計模式中,它們是從許多設計方案中總結出的指導性原則。最常見的7種面向對象設計原則:
♦這些原則首先是復用的原則,遵循這些原則可以有效提高系統的復用性,同時提高系統的可維護性。
【參考:https://www.iteye.com/blog/wasiker-232174】
【參考:https://blog.csdn.net/lovelion/article/details/7536532】
【參考:https://www.sytm.net/ruanjiankaifa/20140210180035.html】
【參考:https://baike.baidu.com/item/%E5%8F%AF%E5%A4%8D%E7%94%A8%E6%80%A7/7157193?fr=aladdin】