- 1、本文档共49页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
抽象数据类型实现实现封装数据对象的两个模型
第七章 继承 抽象: 数据 处理(或方法) 自动封装: 抽象数据类型 自动推导数据对象的操作—继承 操作的多态 Smalltalk简介 7.1?? 抽象数据类型回顾 数据抽象类型 基本概念,及与类型定义的区别 实现 类属抽象数据类型 基本概念 实例化 实现 抽象数据类型 ADT是程序员定义的新数据类型,包括: 1、一个程序员定义的数据类型。 2、一组在该类型对象上的抽象操作。 3、该类型对象的封装。新类型的用户只能通过定义的操作来操纵那些对象。 数据抽象是程序设计的基础部分,涉及抽象数据对象及其操作的定义。 类型定义与封装 类型定义使得变量的声明简单化,只需在声明中写入类型名。但是,该类型的数据对象的内部结构不能对外封装。 任意一个可以声明某类型变量的子程序均可以访问该类型表示的任意分量。任何这样的子程序均可以旁路数据对象上定义的操作,而直接访问和操作该数据对象的部件。 封装的意图是要使得这样的访问不可能。仅仅那些知道数据对象的内部表示的子程序是该类型上的操作,且被定义为类型的一部分。 抽象数据类型:例子 Ada、C++、Smalltalk等语言提供了抽象类型定义机制。 Ada中的Package是抽象数据类型定义的形式。 Private部分指出外界不能访问的内部结构。在包中定义的子程序才可以访问私有数据。 Ada中抽象数据类型定义 抽象数据类型:实现 实现封装数据对象的两个模型。 间接封装(图(a)) 抽象数据类型的结构包A中不仅有对象P的定义,对象P的实际存储在A的激活记录中维护。包B中声明和使用对象P,运行时激活记录必须包含一个到实际数据存储的指针。 直接封装(图(b)) 对象P的实际存储在B的激活记录中维护。 抽象数据类型:实现 Ada使用直接封装模型。因此翻译抽象数据对象的使用将需要对象表示的详细细节,即需知道包规约中的私有部分。 直接封装和间接封装可以用在支持封装的任何程序中,而不管其在语言中实现的封装模型是什么。 抽象数据类型:实现 虽然Ada中使用直接封装,程序员也可以实现间接封装。 Ada中的两种实现策略: 图b的直接封装的变体可以为: Package A is Type MyStack is record Top: integer; A: array (1..100) of integer; End record; …. 在此情形,激活记录组织和直接封装一样,但是,所有名字均在B中可见。 这也是在不提供封装机制的语言中常用的方式。 类属抽象数据类型 语言固有的基本数据类型经常允许程序员声明一类新的数据对象的基本类型,然后规约数据对象的几个属性。这是简单的多态形式。 如,PASCAL提供了基本的数组类型,但也留下了用户可以进一步定义的部分,如下标范围。 Type Vect = array [1..10] of real; 类属抽象数据类型 Ada中整数栈抽象例子 类属抽象数据类型 类属抽象类型定义允许类型的一个属性被分离地规约,从而给出一个基类型定义。使用该属性为参数,进而可从同一个基类型导出几个特殊类型。 它们的结构和基类型类似,但参数可影响抽象类型定义中操作的定义以及类型本身的定义。参数可以是类型名或值。 类属抽象数据类型 Ada中类属栈抽象例子 类属抽象类型定义的实例化 一个类属包定义表示了一个模板,可用于创建特殊的抽象数据类型。这个创建过程称为实例化,通过一组参数的代入。 例:前图类属栈类型定义的实例化: package IntStackType is new AnyStackType(elem= integer); package SetStackType is new AnyStackType(elem= Section); 不同大小的整数栈的声明: Stk1: IntStackType.Stack(100); NewStk: IntStackType.Stack(20); 类属抽象类型定义的实例化 类属类型AnyStackType可以用不同的参数值多次实例化,每次实例化均产生包中类型名Stack的另一个定义。这样当栈在声明中被引用时,有可能是含混的。 Ada中需要将包名放在类型名前作前缀,如: IntStackType.stack或SetStackType.stack 在C++中,用模板来定义类属类: template class type_name class classname class_definition 类属抽象数据类型:实现 类属抽象数据类型通常有直接的实现。实例化时,必须给出参数,编译器使用类属定义为模板,插入参数值,然后编译该定义。 在程序执行过程中,只有数据对象和子程序出现。包定义仅仅作为限制数据对象和子程序可见性的设备,包本身并不出现在运行时。
您可能关注的文档
- 异构信息网上的可达性查询-南京大学PASA大数据试验室.PDF
- 弗兰克·莫莱蒂的世界文学思想-学术交流.PDF
- 引黄灌区种植苜蓿对盐渍化土地理化性状的影响-水土保持研究.PDF
- 弗兰克k西伯利的美学思想-湖北大学学报.PDF
- 弘光技术学院护理系-朝阳科技大学数位教学平台.DOC
- 张新仁-慈济大学研究发展处.PPT
- 强制性规范类型化存在之问题及其矫治-中国民商法律网.PDF
- 张慧--探索遗传物质的过程.PPT
- 强烈的色彩如红橙黄.PPT
- 强调立体裁剪的技术性以抽褶衣身-惠州学院.PPT
- 小学科学:ESP8266智能插座电路原理与动手实践研究教学研究课题报告.docx
- 《金融开放浪潮下我国多层次监管体系构建与创新研究》教学研究课题报告.docx
- 区域教育质量监测中人工智能应用的数据质量分析与优化策略教学研究课题报告.docx
- 《金融科技监管中的数据治理与合规性要求》教学研究课题报告.docx
- 《3D打印技术在航空航天领域中的多材料制造与复合材料应用》教学研究课题报告.docx
- 《绿色金融发展中的政府职能与市场机制研究》教学研究课题报告.docx
- 《植物工厂多层立体栽培光环境调控技术对植物生长发育节律的调控机制探讨》教学研究课题报告.docx
- 销售团队年度业绩总结.docx
- 银行风险管理与金融危机防范.docx
- 银行网络攻击预警与快速响应机制.docx
最近下载
- 最新完整版-途观2012版使用维护说明书.pdf
- 运动生理学 课后答案 (王瑞元 苏全生).pdf VIP
- 2025中国南水北调集团新能源投资有限公司第一批中层及职员岗位社会招聘模拟试卷含答案解析.docx VIP
- 2024年辽宁省高考英语试卷(含答案解析)+听力音频.docx
- 钢轨闪光焊工艺及缺陷 的分析.pdf VIP
- 农行支行信贷营销经验总结.pptx
- 电子制图Portel DXP 2004 项目三.pptx VIP
- 化工导论第三章资料.ppt VIP
- 电子制图Portel DXP 2004 项目二.pptx VIP
- (高清版)B 4053.2-2009 固定式钢梯及平台安全要求 第2部分:钢斜梯.pdf VIP
文档评论(0)