软构笔记-9-面向复用的软件构造技术

软构9 面向复用的软件构造技术

本章大纲:

  • 软件复用的优缺点
  • 为复用而construct
  • 通用可复用组件的特征
  • 开发便携式应用系统的方法
  • 可复用组件的级别和形态
    • 源代码级别的复用
    • 模块级别的复用:类/抽象类/接口
    • 库级别的复用:API/包
    • 系统级别的复用:框架

源代码复用

类型:

  • 白盒复用:源代码可见,可修改和扩展
    • 复制已有代码到正在开发的系统,进行修改
    • PRO:可定制化程度高
    • 其修改增加了软件的复杂度,且需要对其内部充分的了解
  • 黑盒复用:源代码不可见,不能修改
    • 只能通过API接口来使用,无法修改代码
    • Pro:简单,清晰
    • 适应性差些

模块级别的复用 class/interface

class 的复用

两种方式:

  • inheritance 继承
  • delegation 委派
    delegation是当一个对象依赖另一个对象来实现其功能的某些子集时

在OOP中设计复用类

方法:

  • 子类型多态
  • LSP原则

子类型多态

在JAVA中:

  • 子类型可以增加方法,但不可删
  • 子类型需要实现抽象类型中的所有未实现方法
  • 子类型中重写的方法必须有相同类型的返回值或者符合co-variancel的返回值
  • 子类型中重写的方法必须使用同样类型的参数或者符合contra-variancel的参数
  • 子类型中重写的方法不能抛出额外的异常,抛出相同或者符合co-variance的异常

对方法来说意味着:

  • 更强的不变量
  • 更弱的前置条件
  • 更强的后置条件

LSP原则

LSP is a particular definition of a subtyping relation,called (strong) behavioral subtyping强行为子类型化
在编程语言中,LSP依赖以下限制:

  • 前置条件不能强化
  • 后置条件不能弱化
  • 不变量要保持
  • 子类型方法参数:逆变
  • 子类型方法的返回值:协变
  • 异常类型:协变
协变

父类型→子类型:越来越具体specific
返回值类型:不变或变得更具体
异常的类型:也是如此。

反协变、逆变

父类型>子类型:越来越具体specific
参数类型:要相反的变化,要不变或越来越抽象

posted @ 2023-05-20 11:46  No3eTB  阅读(17)  评论(0编辑  收藏  举报