软件复用性

Posted 喵团

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件复用性相关的知识,希望对你有一定的参考价值。

软件复用介绍

软件复用,即使用已存在的软件部件(softwaare components)来实现或者更新软件系统。软件复用有两种视角:一是创造,二是使用。创造即面向复用编程,开发可复用的软件。使用即基于复用编程,利用已有的可复用软件搭建应用系统。

复用是现代软件编写中最重要的概念之一。它具有很多优点,如:适应性,高可靠性,能够降低成本和开发时间等优点。

复用的花销

  1. 可复用的组件应该使用清晰的定义、开放的方式、简洁的接口以及简洁明了的文档。在设计时,也要为未来的更新留足余地。
  2. 复用的代价是很高的,它包括了有组织性的、有技巧的设计,复用中出现的多种变化,以及支撑这些变化的工具的开销与让人们适应新工具与新变化的开销。

同时,可复用的软件一般也具有一定缺陷,它的性能会稍稍差一些,针对更加普适的场景,缺少足够的针对性。

如何定义软件的可复用性

可复用性通常涉及到软件的构建、打包、分发、安装、设置、应用、维护以及更新等问题。
一个具有高可复用性的软件应该小而精、与现行的多种标准相兼容、灵活可变、具有优良的可扩展性、使用泛型参数、具有模块化、在变化中维护较好的局部性、具有良好的稳定性,并且能提供丰富的文档以及帮助。

复用的层次

软件复用具有多种层次,分别是:

  • 代码层面:包括实现的方法,对变量的定义等
  • 模块层面:最基本的就是类与接口
  • 运行库层面:各种API的设计与实现
  • 架构层面:使用各种框架,例如:springboot等现行的流行框架

在这其中最主要的复用是在代码层面,它与程序员息息相关,这是最底层的复用。

代码复用

  1. 白盒复用:源代码可见,可修改与扩展。它的可定制化程度高,需要对代码进行更加深入的了解,对它的修改会增加软件的复杂度。
  2. 黑盒复用:源代码不可见,并且不能修改。我们可以调用API接口来使用内部的黑盒代码,但是无法修改。
    使用代码复用,在大多数情况下,我们都需要对源代码进行修改,以满足新的应用需求。

模块复用

模块复用与类和接口有关,一个类是模块复用的基本单元,我们可以不必知道其中的代码,只需使用jar包导入该类,只需将其添加到classpath中,我们可以使用javap工具来得到一个类的公共方法的headers。 这些模块经过了封装,所以用户在使用时需要查阅类设计者提供的相关文档。

复用类的方法:继承(inheritance)

Java提供了一种名为继承的代码重用方式,一个类使用extends关键字,能够继承一个父类的属性与行为,但子类能够重写父类中的方法。

复用类的方法:委托(delegation)

委托就是一个对象对另一个对象所提供的功能有着依赖关系,例如Sorter分类器委托了一些功能给了Comparator比较器,即分类器的实现与使用需要依赖于比较器。
设计良好的委托可以实现复用
因此,分类器(Sorter)可以被不同的分类顺序所复用,比较器(Comparator)可以被需要比较数字的代码所复用。
复用也有两种分类,分别是明确委托与隐性委托。明确委托是直接在代码层面上传递相应的对象,而隐性委托则不直接写出来,它与Java中的语法密切相关。

接口

接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

运行库复用

运行库(library)即提供了可复用功能的类与方法的集合。许多API提供了这些类与方法,能让我们更好地实现自己想要的功能。典型的有Java API

设计精良的API的特点

  • 容易学。具有丰富的文档,让用户第一次使用的时候不至于一头雾水。
  • 容易使用,使用方法符合直觉,符合普遍的编程习惯,让用户很难用错(misuse)。
  • 使用该API写出的代码可读性强,并且易于维护。
  • API封装得精良,用户不需要知道底层实现细节便能轻松使用该API。
  • 足够满足大部分的设计需求。
  • 便于更新,且对API的更新不影响已存在的使用该API的代码。

框架层面

应用框架,即软件的骨架,软件的其他部件都依托于该骨架,它包括了类与类之间的关系,接口之间的依赖关系等等。使用了框架,我们仅需向该框架中写入自己的特定代码,大大降低了写代码的时间。

框架分为黑盒框架与白盒框架。黑盒框架需要通过实现特定接口或者使用委托(delegation)进行框架的扩展,白盒框架则需要我们深入代码底层进行修改以实现框架的扩展。

Java中的常见框架有:Spring、Springboot。Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

以上是关于软件复用性的主要内容,如果未能解决你的问题,请参考以下文章

可复用

软件的可复用性和可维护性

软件的可复用性和维护性

软件构造 第五章第一节 可复用性的度量形态和外部观察

软件的可复用性和维护性

软件的可复用性和维护性