pm-chap9数据抽象与面向对象的程序设计-1.ppt
文本预览下载声明
9章 数据抽象与面向对象程序设计 鲍玉斌 东北大学信息学院 计算机软件与理论研究所 Outline 1.大型程序设计概述 2.数据抽象和抽象数据类型 3. 抽象数据类型的形式规范描述 4. 面向对象技术的优势 5.面向对象基本概念 6. 面向对象的设计过程 7.面向对象 vs 传统的设计方法 8. 面向对象设计的基本原则 9.1大型程序设计概述 内容提要: 大型程序的基本特点 与小型程序设计的差别 大型程序设计方法 模块分解准则 9.1大型程序设计概述 一、 大型程序的特点 大型程序是相对程序的复杂性而言,复杂性来自两个方面: 由多个人合作完成,形成大型程序的设计管理时的复杂性: 任务划分、估计、资源分配、每个程序员进度的掌握、控制,检查每个阶段的设计标准等。 来自于大量的系统状态。正确处理每个状态、组织系统的程序逻辑、验证系统的正确性非常困难 正确性仍然是程序设计的首要目标。健壮性、易维护性、可靠性、可重用性 9.1大型程序设计概述 二、 大型程序设计 大型程序设计必然用模块化设计思想. 自顶向下、分而治之是对付系统复杂性的重要手段。 分解和抽象是设计大型程序的重要方法。 大型程序设计 就是如何将一个大型的程序系统分解为易于管理的模块、如何定义模块的界面、如何把这些模块组织成一个程序系统的过程。 实质是用模块进行程序设计 重点在于模块的连接和相互作用。 大型程序的设计=大型程序设计+小型程序设计 另一个很重要的方面是软件开发环境和开发工具的选择. 9.1大型程序设计概述 三、 模块分解的原则 模块化方法通过减少任意时刻所必须考虑的细节(即抽象的方法)来控制系统的复杂性. 不同的模块分解方法对系统的效率和复杂性的控制有很大的影响. 四、 模块分解的两种方法: 基于功能抽象的模块分解方法. 数据作为模块的界面, 成为横向模块化设计. 基于数据抽象的模块分解方法. 以“信息隐蔽”为模块分解原则. 数据上的操作作为模块的界面, 称为纵向模块化设计, 大型软件系统的设计一般是横向和纵向模块化设计的综合 9.2 数据抽象和抽象数据类型 数据和对数据的处理是整个程序设计的核心 数据表示的复杂性决定其上操作实现的复杂性: Algorithm+Data Structure= Program 有效地控制数据的表示,是控制程序复杂性的关键. 基于功能分解的模块化设计方法不能用于控制大型软件系统的复杂性。 数据抽象是一种新的设计方法,它把一组数据对象及其作用其上的操作组成一个程序实体,使得外部只知道它做什么,而不知道它怎么做,也不知道其数据对象是如何表示的。 9.2数据抽象和抽象数据类型 控制大型程序的复杂性要解决的问题: 更新程序设计语言中的类型定义的设施,使得类型的内部表示细节对外界不可见,使得用户程序不依赖于数据的某一具体的表示。 寻求连接模块的新方法,尽可能缩小模块的界面。 解决途径: 在程序设计语言中更新模块的概念,寻求访问类型对象的新途径。 Simula67语言引入类(class)的概念。一个逻辑模块在其中可以表示为过程、函数、或类 设计具有下面特征的语言,如并行Pascal、Ada等: 9.2数据抽象和抽象数据类型 类型不在是单纯的一组值集,而是一组值集和一组操作的二元合成。 为用户提供自定义类型的设施,如并发Pascal中的进程,管程,过程,Ada中的Package。使得类型表示细节、操作的实现对外不可见,故称为抽象数据类型。 用户自定义类型设施正是语言中的基本程序模块,从而将模块和数据类型等同起来;一个模块是由数据和作用在其上的操作构成的实体。 这时,模块不在是一个功能抽象单位,而是一个数据抽象单位。模块间的界面不再是复杂的数据,而是作用在数据上的具有形式说明的操作 9.2数据抽象和抽象数据类型 总之: 数据抽象是程序设计方法学的一个极为重要的方法,是70年代程序设计方法学的主要成就之一。 把数据抽象和结构化程序设计一起誉为程序设计方法学发展史上的两个里程碑。 9.3 抽象数据类型的形式规范描述 为什么: 程序员如何来定义数据抽象模块? 模块的用户怎样才能在不知道细节的情况下,正确地使用语言数据抽象模块? 9.3.1 抽象数据类型的规范描述 1. 抽象数据类型的规范描述: 程序员在划分模块时,必须给出模块语义的注释—规范描述: 说明模块将做什么; 使得设计者能够以此作为模块设计的目标; 确保编写的模块满足规范描述的要求,保证模块实现的正确性; 模块的使用者以此作为使用的依据,保证用户正确理解模块和正确使用模块 便于证明模块实现的正确性; 为使用模块的应用程序的正确性证明提供条件 9.3.1 抽象数据类型的规范描述 2. ADT规范描述方法 ADT的形式规范有许多方法,可归为两类: 操
显示全部