第五章 抽象一:封装
第五章 抽象一:封装
大型程序的构造中,程序员不可避免要涉及到新数据类型的设 计和实现 如:大学中,表示一堂课的数据对象 section,包含的信息有: 老师名、教室、最大注册数等,还可以包含一个注册学生列 表作为部件 操作包括:创建一个 section、注册一个学生、消除一个 sectior寺。 其实现主要涉及其表示以及对应相关操作的子程序设计 语言实现的目标是使得数据的各种形式的不同对程序员透明 因此,基本类型和用户定义类型对程序员的使用来说应不存在 差别
•大型程序的构造中,程序员不可避免要涉及到新数据类型的设 计和实现。 如:大学中,表示一堂课的数据对象section,包含的信息有: 老师名、教室、最大注册数等,还可以包含一个注册学生列 表作为部件。 操作包括:创建一个section、注册一个学生、消除一个 section等。 其实现主要涉及其表示以及对应相关操作的子程序设计。 •语言实现的目标是使得数据的各种形式的不同对程序员透明。 因此,基本类型和用户定义类型对程序员的使用来说应不存在 差别
有三种机制可被程序员用来创建新类型和类型上的操作。 、子程序:可用子程序来定义实现类型的操作,但如何正 确地使用,却是程序员的责任 2、类型声明:语言包含有定义新类型及其操作的能力。抽 象数据类型即是这种机制,它提供了检测错误使用的能力 3、继承:基于已有类型创建新类型的机制
•有三种机制可被程序员用来创建新类型和类型上的操作。 1、子程序:可用子程序来定义实现类型的操作,但如何正 确地使用,却是程序员的责任。 2、类型声明:语言包含有定义新类型及其操作的能力。抽 象数据类型即是这种机制,它提供了检测错误使用的能力。 3、继承:基于已有类型创建新类型的机制
51抽象数据类型 数据类型概念的演化 早期类型定义为值的集合,该类型的变量可在该集合中取值 70年代初, Pascal扩展类型定义为:变量的集合。 70年代早期,概念进一步演化,类型不仅仅是类型对象的集 合,还包含了其相关操作。正是操作展示了对象的行为。 例:对基本类型实数和整数,语言提供了声明机制和相 关操作。从而其存储表示被封装,程序员使用它们而不 需知道表示细节 数据抽象——以数据为中心的封装方式 ADT定义为 组数据对象,通常使用一个或多个类型定义 2、一组对这些对象的抽象操作。 3、二者的封装,使得该类型的用户只能通过这些操作来 操纵该类型的数据对象
5.1 抽象数据类型 数据类型概念的演化 早期类型定义为值的集合,该类型的变量可在该集合中取值。 70年代初,Pascal扩展类型定义为:变量的集合。 70年代早期,概念进一步演化,类型不仅仅是类型对象的集 合,还包含了其相关操作。正是操作展示了对象的行为。 例:对基本类型实数和整数,语言提供了声明机制和相 关操作。从而其存储表示被封装,程序员使用它们而不 需知道表示细节。 •数据抽象——以数据为中心的封装方式 ADT定义为: 1、一组数据对象,通常使用一个或多个类型定义。 2、一组对这些对象的抽象操作。 3、二者的封装,使得该类型的用户只能通过这些操作来 操纵该类型的数据对象
信息隐蔽 “分而治之”是我们编写大型程序的一般策略,程序被分成 模块。 模块设计有两种途径:①功能分解,②数据分解。 然而,功能设计有一定缺陷,不能对数据结构的细节提供 很好隐蔽。 而使用数据抽象可以避免这些问题。 数据类型的规约给出了所有使用该类型对象所需要的信息, 而实现细节则对外屏蔽。 ·“抽象”在语言中是一个重要概念,语言以两种方式提供对 抽象的支持。首先,提供一个抽象虚拟机,它比实际计算机 更易于使用,也更强大,语言直接提供了一些有用的抽象, 称为语言的特性;第二,语言提供了辅助程序员定义抽象的 设施,这些抽象形成了特定程序定义的抽象机
信息隐蔽 •“分而治之”是我们编写大型程序的一般策略,程序被分成 模块。 模块设计有两种途径:①功能分解,②数据分解。 然而,功能设计有一定缺陷,不能对数据结构的细节提供 很好隐蔽。 而使用数据抽象可以避免这些问题。 •数据类型的规约给出了所有使用该类型对象所需要的信息, 而实现细节则对外屏蔽。 •“抽象”在语言中是一个重要概念,语言以两种方式提供对 抽象的支持。首先,提供一个抽象虚拟机,它比实际计算机 更易于使用,也更强大,语言直接提供了一些有用的抽象, 称为语言的特性;第二,语言提供了辅助程序员定义抽象的 设施,这些抽象形成了特定程序定义的抽象机