软件构造:5-1 Metrics, Morphology and External Observations of Reusability

可复用性的度量、形态与外部表现

具有好的可复用性的软件应当具有以下特性:

  • 小、简单
  • 与标准兼容
  • 灵活可变
  • 可扩展
  • 泛型、参数化
  • 模块化
  • 变化的局部性
  • 稳定
  • 丰富的文档和帮助

不同层面的复用

最主要的复用是代码层面的复用。

在软件构造的过程中任何实体都可能被复用。

  • 需求
  • 规约
  • 数据
  • 测试用例
  • 文档

复用类型:

  1. 白盒复用:源代码课件,可修改和扩展;
  2. 黑盒复用:源代码不可见,不能修改。

白盒复用的特点:

  1. 复制已有代码当正在开发的系统,进行修改;
  2. 可定制化程度高;
  3. 其修改增加了软件的复杂度,且需要对其内部充分的了解。

黑盒复用的特点:

  1. 只能通过API接口来使用,无法修改源码;
  2. 简单,清晰;
  3. 适应性差些。

源代码层面的复用

模块层面的复用(类/接口)

复用一个类的方法:

  1. 继承
  2. 委托

委托:委托就是一个对象依赖另一个对象来实现其功能的某个子集(一个实体将某些东西传递给另一个实体)

例如Sorter的部分功能委托给了Comparator

显示委托:发送传递对象给接受对象;
隐式委托:查找规则的语言(???不懂)

库层面的复用(API/Package)

系统层面的复用 Framework

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

开发者需要根据framework的规约,填充自己的代码进去,形成完整的系统。

将framework看作是更大规模的API复用,除了提供可复用的API,还将这些模块之间的关系都确定下来,形成了整体应用的领域复用

Framework作为主程序加以执行,执行过程中调用开发者所写的程序

开发者根据Framework预留的接口所写的程序

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

(惯例不懂,干 * 2)
白盒框架:

  1. 可扩展性通过继承和动态绑定实现;
  2. 现有的功能是通过子类化框架基类和覆盖预定义的hook methods来扩展的;
  3. 常规的设计模式比如基类方法模式是重写hook methods实现的。

(不懂,干 * 3)
黑盒框架:

  1. 可扩展性通过给组件定义可以接入框架的接口;
  2. 通过定义符合特定接口的组件,可以重用现有功能;
  3. 组件通过委托集成在框架中。

类库 VS 框架:
类库的特性:

  • 更少特定的领域(???,干)
  • 提供更小的重用范围
  • 类库是被动的;控制流程无约束

框架:

  • 框架是 类 合作用于一系列相关应用程序
  • 框架是主动的,影响控制流

框架经常使用类库来简化开发过程。
框架的事件处理实用类库完成基本任务。

重用性的外部行为:

  • 类型可变
  • 功能分组
  • 实现可变
  • 表示独立
  • 共性抽取

你可能感兴趣的:(软件构造)