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

大纲
▪ 设计可重用类
-继承和重写
-重载
-参数多态性和泛型编程
-行为子类型和Liskov替换原则(LSP)
-组合和委托
▪ 设计系统级可重用库和框架
——API和库
——框架
——Java集合框架(示例)

1设计可重用类
在OOP中设计可重用类
▪ 封装与信息隐藏
▪ 继承和重写
▪ 多态性、子类型化和重载
▪ 通用程序设计
▪ 行为亚型与Liskov替代原理(LSP)
▪ 授权和组成

行为亚型
▪ 子类型多态性:客户端代码可以统一处理不同类型的对象。
–如果类型Cat是动物的一个亚型,那么在使用类型Animal的表达式的任何地方都可以使用类型Cat的表达式。
▪ 设q(x)是关于T类型的对象x可证明的属性,那么q(y)应该是S类型的对象y可证明的,其中S是T的子类型。

行为亚型
▪ Java中编译器强制的规则(静态类型检查)
-子类型可以添加,但不能删除方法
-具体类必须实现所有未定义的方法-重写方法必须返回相同的类型或子类型
-重写方法必须接受相同的参数类型
-重写方法不能引发其他异常
▪ 也适用于指定的行为(方法):
-相同或更强的不变量
-相同或较弱的前提条件
-相同或更强的后置条件

行为子类型(LSP)的示例1
▪ 子类满足相同的不变量(以及附加的不变量)
▪ 重写的方法具有相同的前置和后置条件
在这里插入图片描述
行为子类型(LSP)的示例2
▪ 子类满足相同的不变量(以及附加的不变量)
▪ 重写的方法start具有较弱的前置条件
▪ 重写方法brake具有更强的后置条件

在这里插入图片描述
Liskov替代原理(LSP)
▪ LSP是子类型关系的一个特殊定义,称为(强)行为子类型▪ 在编程语言中,LSP依赖于以下限制:
–子类型中不能加强前置条件。
–后条件在子类型中不能减弱。
–子类型中必须保留父类型的不变量。
–子类型中方法参数的逆变
–子类型中返回类型协变。
–子类型的方法不应引发新异常,除非这些异常本身是父类型的方法引发的异常的子类型。

在这里插入图片描述

▪ 更具体的类可能有更具体的返回类型
▪ 这称为子类型中返回类型的协变
在这里插入图片描述
▪ 为子类型的方法声明的每个异常都应该是为父类型的方法声明的某个异常的子类型。
在这里插入图片描述
▪ 在逻辑上,它被称为子类型中方法参数的协变。▪ 这在Java中实际上是不允许的,因为这会使重载规则复杂化。
在这里插入图片描述
协方差与反方差
▪ 数组是协变的,给定Java的子类型规则,T[]类型的数组可以包含T类型的元素或T的任何子类型。
▪ 在运行时,Java知道这个数组实际上被实例化为一个整数数组,它只是碰巧通过一个类型为Number[]的引用来访问。

泛型的LSP
▪ 泛型是类型不变的–ArrayList是List的子类型
–List不是List的子类型
▪ 编译完代码后,编译器将丢弃类型参数的类型信息;因此在运行时此类型信息不可用。
▪ 此过程称为类型擦除
▪ 泛型不是协变的。

Java在运行时,为所有对象维护一 个运行时类型标识,这个标识跟踪对象所属的类,用来确定选择哪个方 法运行。保存这些信息的类叫做“Class类型类”。注意:Class是类的名 字,不是关键词class。每个”Class”的对象描述了一个类的信息
▪ 获取类类型的对象有三种方法
在这里插入图片描述
什么是类型擦除?
虚拟机中没有泛型类型对象-所有对 象都属于普通类!
泛 型信息只存在于编译阶段,在运行时会被”擦除”
定义泛型类型时,会自动提 供一个对应的原始类型(非泛型类型),原始类型的名字就是去掉类型参数后的 泛型类型名。
擦除时类型变量会被擦除,替换为限定类型, 如果没有限定类型则替换为Object类型。
在这里插入图片描述
在这里插入图片描述

运行时类型查询仅适用于原始类型
在这里插入图片描述
在这里插入图片描述
我们不能认为整数列表是数字列表的子类型。
对于类型系统,这将被认为是不安全的,编译器会立即拒绝它。
▪Box 不是Box 的子类型,即使Integer是Number的子类型。 ▪给定两个具体的类型A和B(例如,Number和Integer),无论A和B是否相关,MyClass 与MyClass 没有关系。 MyClass 和MyClass 的公共父对象是Object。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可复用面向对象软件的基础是一本涵盖了面向对象软件设计原则和方法的重要教材。该书以简洁清晰的语言,详细介绍了面向对象软件开发的基本概念和技术。 该书的目录包含以下几个主要部分: 第一部分:导论 - 第1章:软件复用面向对象软件开发概述 - 第2章:软件复用需求和特征分析 - 第3章:面向对象编程概述 第二部分:面向对象分析与设计 - 第4章:面向对象分析方法 - 第5章:面向对象设计原则 - 第6章:面向对象设计模式 第三部分:面向对象软件开发工具与环境 - 第7章:面向对象开发环境 - 第8章:面向对象编程语言概述 - 第9章:面向对象项目管理和团队合作 第四部分:面向对象软件复用 - 第10章:面向对象软件复用基础 - 第11章:面向对象库和框架 - 第12章:面向对象软件组件和服务 第五部分:面向对象软件复用实践 - 第13章:面向对象软件复用的实施步骤 - 第14章:面向对象软件复用的案例研究 该书结合理论与实践,通过丰富的案例研究和实施步骤的介绍,使读者更好地理解和掌握面向对象软件复用的实践技巧。此外,书中提供了大量的参考文献,方便读者进一步深入学习。 《可复用面向对象软件的基础》是一本对于软件工程师、计算机科学学生和从事面向对象软件开发的人员来说必不可少的参考书。通过阅读和学习该书,读者可以加深对面向对象思想的理解,提高软件开发效率和质量,实现软件复用的目标。 ### 回答2: 可复用面向对象软件的基础是一本非常重要的书籍,它由Bertrand Meyer于1988年出版。这本书详细介绍了面向对象软件设计和开发的基本原理和方法。 书中的目录包括以下几个主要章节:导言、面向对象方法概述、类和对象、继承、抽象数据类型、软件复用面向对象方法的支持、面向对象方法的操作、面向对象方法的审计、面向对象方法的设计、面向对象的设计方法、面向对象方法与形式化方法、面向对象方法与产品生命周期、面向对象方法的方法论等。 这本书从面向对象软件设计的基本概念出发,系统地介绍了面向对象方法的理论和实践。它不仅包括了面向对象的核心概念,如类、对象、继承等,还深入探讨了抽象数据类型、软件复用等重要主题。 这本书的优点在于它将理论与实践相结合,既有深入的理论阐述,也有实例和案例的分析。通过这些实例和案例,读者可以更加深入地理解面向对象软件设计的思想和方法。 此外,这本书还介绍了面向对象方法的支持工具和审计方法,以及面向对象方法与其他方法的比较和集成。这些内容为读者提供了更多的选择和思考角度。 总的来说,可复用面向对象软件的基础是一本非常权威和实用的书籍,对于学习和应用面向对象方法的软件工程师来说是一本必读之作。无论是初学者还是有一定经验的开发者,都可以通过阅读这本书来提高自己的软件设计和开发能力。 ### 回答3: 可复用面向对象软件的基础PDF带目录是一种以面向对象编程为基础的软件开发指南,主要介绍可复用软件设计原则和方法。该指南的目录结构如下: 1. 引言 1.1 软件复用的概述 1.2 面向对象编程的优势 1.3 本指南的目的和范围 2. 面向对象基础 2.1 类和对象的概念 2.2 继承和多态 2.3 封装和抽象 2.4 组合与聚合关系 3. 可复用的设计原则 3.1 单一责任原则 3.2 开放封闭原则 3.3 里氏替换原则 3.4 接口分离原则 3.5 依赖倒置原则 4. 设计模式 4.1 创建型设计模式 4.2 结构型设计模式 4.3 行为型设计模式 5. 软件复用的实践 5.1 组件化开发 5.2 框架设计 5.3 代码重构 通过阅读这本PDF,读者能够了解面向对象编程的核心概念和优势,掌握可复用软件设计的基本原则,学习常用的设计模式,并了解软件复用的实践方法。这对于软件工程师和开发人员来说是一本非常有价值的参考资料,可以帮助他们更好地设计和开发可复用面向对象软件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值