- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
构造数据抽象
2. 构造数据抽象(1)
本章关注数据抽象,这一节讨论
数据抽象的意义
建立数据抽象
序对:Scheme 语言的基本组合结构
复杂的数据,层次性数据
表和表操作
表映射和树映射
把序列用作程序模块之间的接口
程序设计技术和方法 裘宗燕,2014-3-13 -1-
数据抽象的意义
前面讨论过程时只考虑简单的数据
解决复杂问题,处理和模拟复杂现象的时候,常需要构造和处理复
杂的计算对象
第二章关注具有复杂结构的数据的计算,讨论
构造复合数据对象(通过数据的组合)
处理复合数据对象
与构造复合过程类似,构造复合数据也能
提高编程的概念层次(可能在比基本数据更高的层面上工作)
提高设计的模块性(基于复合数据来组织程序,很重要)
增强语言的表达力(增加了“新”数据类型)
为处理计算问题提供更多手段和方法
下面用一个简单问题讨论有关情况
程序设计技术和方法 裘宗燕,2014-3-13 -2-
有理数计算
假设要实现过程add-rat,计算两个有理数之和。在基本数据层,一个
有理数可以看作两个整数。可以考虑实现两个过程
add-num 计算结果的分子
add-den 计算结果的分母
这种做法显然很不理想:
如果有多个有理数,记住成对的分子和分母是很大麻烦
相互分离的两个调用很容易写错
所有运算的实现/使用都有同样问题
应该把一个有理数的分子分母粘在一起,做成复合数据(一个整体)
有了复合数据对象,就能在更高概念层上定义和使用操作(处理有
理数,而不是处理两个整数),更清晰,更容易理解和使用
数据抽象的定义(表示和操作实现细节)与使用分离,提高了程序
模块性。两边都可以独立演化,更容易维护修改
程序设计技术和方法 裘宗燕,2014-3-13 -3-
数据抽象的意义
实现数据抽象,编程语言需要提供:
粘合机制,支持把一组数据对象组合成一个整体
操作定义机制,定义针对组合数据的操作
抽象机制,屏蔽实现细节,使组合数据能像简单数据一样使用
处理复合数据的一个关键概念是闭包:组合数据粘合机制应该不仅能用
于基本数据,也能用于复合数据,以支持构造更复杂的复合数据
本章还要讨论:
复合数据如何支持以“匹配和组合”方式工作的编程接口
通过定义数据抽象,进一步模糊“过程”和“数据”的差异
符号表达式的处理,这种表达式的基本部分是符号而不是数
通用型(泛型)操作,使同样操作可能用于不同的数据
数据制导(导向/驱动)的程序设计,方便新数据类的加入
程序设计技术和方法 裘宗燕,2014-3-13 -4-
数据抽象入门
一个过程描述了一类计算的模式,又可以作为元素用于实现其他(更复
杂的)过程。因此过程是一种抽象,过程抽象
屏蔽计算的实现细节,可以用任何功能/使用形式合适的过程取代
规定了使用方式,使用方只依赖于抽象的使用方式约定
数据抽象的情况类似。一个数据抽象实现一类数据所需的所有功能,又
像基本数据元素一样可以作为其他数据抽象的元素
屏蔽一种复合数据的实现细节
提供一套抽象操作,使用组合数据的就像是使用基本数据
数据抽象的接口(界面)包括两类操作:构造函数和选择函数。构
造函数基于一些参数构造这类数据,选择函数提取其内容
后面将说明,如果需要支持基于状态的程序设计,那么就需要增加另外
一类变动操作(mutation,修改操作)
下面以有理数为例讨论数据抽象的构造
程序设计技术和方法 裘宗燕,2014-3-13 -5-
文档评论(0)