代码复用
代码复用,也被称作软件复用,是一种计算机软件工程方法和理论。就是再利用已有的代码,或者相关的知识去编写新的代码来构造软件。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年10月31日]. (原始内容存档于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(页面存档备份,存于互联网档案馆)