第五章 代码的可复用性——复用性的度量、形态、与外边观测

1. 面向/基于复用编程(Programing for/with reuse)

面向复用编程(Programing for reuse):是为了开发出可复用的软件。

基于复用编程(Programing with reuse):利用已有的可复用软件搭建应用系统。

以上是软件复用的两种观点,软件复用就是字面上的意思,使用现有的软件组件实现、更新软件系统的过程。

复用的优点:

  • 降低了开发成本与时间成本。
  • 复用的代码已经经过了充足的测试,代码可靠稳定。
  • 标准化,在不同应用中其表现一致。

但开发可复用的软件也存在一定的缺点,比如由于需要适应更多的场景(足够的适应性),所以其针对性并不是很强,往往性能较差,而且开发成本也要高于一般软件成本。

如果是对已有软件进行开发,可复用的软件库,一定要进行有效的管理,还要记得这些往往大多数无法直接拿来使用,需要适配。


计算可复用性需要考虑一下几种情况:

  • 复用的机会有频繁?复用的场合有多少?
  • 复用的代价如何?
    其中包括搜索获取复用的代码(有足够的money没有?能不能找到?),适配拓展的代价,实例化代价,与其他软件部分相连的难度等等。

高复用化的代码应有以下特点:

  1. 软件规模小且简单。
  2. 与标准兼容
  3. 灵活可变
  4. 可拓展
  5. 泛型、参数化
  6. 模块化
  7. 变化的局部性
  8. 稳定
  9. 丰富的文档与帮助


源代码层面的复用:

虽然该处复用的最主要是在代码层面上,但是软件构造过程中任何实体都可能被复用,其包括需求、规约、数据、测试用例、文档等等。现来主要讨论代码复用

代码复用:

代码复用主要分为两种:

  • 白盒复用(white box reuse):源代码可见,可修改和拓展
    特点:1. 赋值已有的代码当正在开发的系统中,进行修改
              2. 可定制化程度高
              3. 对其修改增加了软件的复杂度,且需要对其内部充分的了解。
  • 黑盒复用(black box reuse):源代码不可见,不能修改
    特点:1. 只能通过API接口来使用,无法修改代码。
              2. 简单清晰
              3.适应性差


系统层面的复用:

应用框架:一组具体类、抽象类、及其之间的连接关系。

开发者可以根据框架的规约,填充自己的代码,然后形成一个完整的系统。


开发者会根据框架特点,增加新代码,对抽象类进行具体化。


现在来介绍一个名为控制反转(Inverse of control)的概念:

特点是:

  • 有第三方的容器来控制对象之间的依赖关系,而非传统实现中有代码直接操控。
  • 控制权有代码中转到了外部容器,带来的好处就是降低了对象之间的依赖程度,提高了灵活性和可维护性。



可复用性的外部观测:

  • 类型可变(Type Variation)
    使用不同的类型且满足LSP(见下节)
  • 功能分组(Routine Grouping)
    提供完备的细粒度操作,保证功能的完整性,不同的场景下复用不同的操作(及其组合)
  • 实现可变(Implementation Variation)
    ADT有多种不同的实现,提供不同的representation(表现)和AF,但具有相同的spec(前后置条件和不变量),从而可以使用不同的应用场景
  • 表示独立(Representation Independence)
    内部实现可能会变化,但表示独立(客户端不受到影响,信息隐藏)
  • 共性抽取(Factoring Out Common Behaviors)
    将共同的行为抽象出来,形成可复用实体




猜你喜欢

转载自blog.csdn.net/qq_37549266/article/details/80712962