代碼複用
![本頁使用了標題或全文手工轉換](http://upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
![]() |
代碼複用,也被稱作軟件複用,是一種電腦軟件工程方法和理論。就是再利用已有的代碼,或者相關的知識去編寫新的代碼來構造軟件。20世紀60年代的「軟件危機」使程式設計人員明白難於維護的軟件成本是極其高昂的,當軟件的規模不斷擴大時,這種軟件的綜合成本可以說是沒有人能負擔的,並且即使投入了高昂的資金也難以得到可靠的產品,而軟件重用的思想是解決這一問題的根本方法。[1]
軟件複用的主要思想是,將軟件看成是由不同功能部分的「組件」所組成的有機體,每一個組件在設計編寫時可以被設計成完成同類工作的通用工具,這樣,如果完成各種工作的組件被建立起來以後,編寫一特定軟件的工作就變成了將各種不同組件組織連接體來的簡單問題,這對於軟件產品的最終質素和維護工作都有本質性的改變。軟件重用有助於提高軟件的質素和開發效率,降低軟件的開發和維護成本。[2]
概要
[編輯]軟件複用就是將已有的軟件成分用於構造新的軟件系統。[3][4]可以被複用的軟件成分一般稱作可複用構件,[5]無論對可複用構件不加修改直接使用還是修改後再使用,只要是用來構造新軟件,則都可稱作複用。[6]從更大的角度理解,軟件重用也包括應用專案的重用,規格說明(也稱為規約)的重用,設計的重用,概念和方法的重用等等。[7][8]
如果在一個系統中多次使用一個相同的軟件成分,則不稱作複用,而稱作共用;對一個軟件進行修改,使它執行於新的軟硬件平台也不稱作複用,而稱作軟件移植。
可複用的代碼以及相關的知識與需求文件,設計,測試用例一樣都是軟件開發的組織內部所不可或缺的資產。事實上,最早為人所知的複用正是從代碼複用開始的。所謂的代碼複用,本質上就是對曾經編寫過的代碼的一部分甚至全部重新加以利用,從而構建新的程式。使用這種方法就可以將程式設計師從費時費力的重複勞動中解放出來。
程式庫是一種代碼複用的很好的形式。程式設計師可以建立內部抽象以便程式的部分代碼可被複用,或者直接建立一個自訂庫給自己使用。用于衡量代碼可複用程度的特性通常包括:模組化,低耦合,高內聚,數據封裝以及SOC。
如果編寫代碼時要利用已有的代碼,則必須定義某種介面或者通訊的方法。這通常包含了對子程式,對象,類或原型的參照或呼叫。
對於以某個已有程式的舊版本作為出發點來進行新版本的開發的做法也可被視為一種代碼複用。
還有一種做法也可被視為代碼複用。即直接從已有程式中將一段代碼拷貝出來並貼上到另一個地方作為新程式的一部分。但是這種做法往往會使得程式設計師最終陷入重複代碼過多的問題。
為了使代碼複用更加方便,更加迅速並且更加體系化,相關的研究者也進行了大量的研究。物件導向程式設計就是以此為目的而衍生出來的方法。更加新一點的方法就是代碼自動生成,它會基於用戶設置的一系列參數來自動生成程式的代碼。與此類似的概念被稱之為元程式設計。
複用的類型
[編輯]- 機會性的代碼複用
- 開發團隊在專案開始時便已知可複用的代碼或組件的存在,因而決定進行代碼複用。
- 有計劃的代碼複用
- 開發團隊從戰略角度為了日後的開發能夠複用代碼而進行設計。
複用的形式
[編輯]程式庫
[編輯]編寫程式庫是進行代碼複用最常見的方法。很多共通的操作,比如檔案的讀/寫,作業系統資訊的取得的動作都會被封裝在程式庫中,然後由軟件開發人員來呼叫。使用程式庫的一大優點就是它所提供的操作都是經過充分測試的,但是缺點則是無法對程式庫提供的操作的具體實現進行調整,同時程式庫也要求軟件開發人員花大量時間去學習它的用法。
設計模式
[編輯]設計模式對於同類的相似問題提供了通用的解決方法。它所提供的是概念上的解決方法,對於具體問題往往還需要具體實現一份代碼。利用抽象類或介面往往可以在特定的設計模式中達到代碼的複用。
應用框架
[編輯]軟件開發人員往往可以通過第三方的應用程式或者框架來實現對一個程式的大範圍複用,這可以有效地提高生產效率。但缺點在於第三方的應用程式或者框架往往只在某個特定的應用範圍內才可以適用。
參見
[編輯]參考資料
[編輯]- ^ 软件复用技术研究--《北京理工大学学报》1998年06期. www.cnki.com.cn. [2022-08-09]. (原始內容存檔於2020-10-23).
- ^ Lombard Hill Group. What Is Software Reuse?. lombardhill.com. Lombard Hill Group. [22 October 2014]. (原始內容存檔於23 January 2019).
- ^ Frakes, W.B.; Kyo Kang. Software Reuse Research: Status and Future. IEEE Transactions on Software Engineering. July 2005, 31 (7): 529–536. CiteSeerX 10.1.1.75.635
. S2CID 14561810. doi:10.1109/TSE.2005.85.
- ^ Lombard Hill Group. What Is Software Reuse?. lombardhill.com. Lombard Hill Group. [22 October 2014]. (原始內容存檔於23 January 2019).
- ^ 4. Code Reuse: Functions and Modules - Head First Python, 2nd Edition [Book]. www.oreilly.com. [2022-01-26]. (原始內容存檔於2022-05-30) (英語).
- ^ Code reuse. DocForge. [2024年8月11日]. (原始內容存檔於2011-07-10).
- ^ 软件工程 - 百度文库. wenku.baidu.com. [2022-08-09]. (原始內容存檔於2022-08-09).
- ^ Colombo, F. It's not just reuse. SharedNow.blogspot. 2011 [2022-08-09]. (原始內容存檔於2022-08-09).
外部連結
[編輯]- Software Reuse NASA
- RiSE - Reuse in Software Engineering
- ReNews - SoftwareReuse and Domain Engineering
- Koders Open Source Search Engine
- merobase - a Search Engine for Software Components(頁面存檔備份,存於互聯網檔案館)