- 1、本文档共32页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第2章抽象数据类型和Python类
第2 章 抽象数据类型和Python 类
在讨论具体的数据结构概念和技术之前,本章将首先介绍抽象数据类型的重要概念和
Python 面向对象的程序设计技术。后者可以看作一种实现抽象数据类型的技术,但还有所扩
充,它也是本书中实现各种数据结构时使用的基本技术。
2.1 抽象数据类型
抽象数据类型(Abstract Data Type ,ADT )是计算机领域中被广泛接受的一种思想和方法,
也是一种用于设计和实现程序模块的有效技术。ADT 的基本思想是抽象,或者说是数据抽象
(与函数定义实现的计算抽象或称过程抽象对应)。
按照抽象的思想,设计者在考虑一个程序部件时,应该首先给出一个清晰边界,通过一套
接口描述说明这一程序部分的可用功能,但并不限制功能的实现方法。从使用者的角度看,一
个程序部件实现了一种功能,如果适合实际需要,就可以通过其接口使用之,并不需要知道其
实现的具体细节。Python 的函数就是一种功能部件,其头部定义了它的接口,描述了函数的名
字及其对参数的要求。使用者只需要考虑函数的功能是否满足实际需要,还要保证调用式符合
函数头部的要求,并不需要知道函数实现的任何具体细节。
在程序开发实践中人们逐渐认识到,仅有计算层面的抽象机制和抽象定义还不够,还需要
考虑数据层面的抽象。能围绕一类数据建立程序组件,将该类数据的具体表示和相关操作的实
现包装成一个整体,也是组织复杂程序的一种有效技术,可以用于开发出各种有用的程序模
块。要把这种围绕着一类数据对象构造的模块做成数据抽象,同样需要区分模块的接口和实
现。模块接口提供使用它提供的功能所需的所有信息,但不涉及具体实现细节。另一方面,模
块实现者则要通过模块内部的一套数据定义和函数(过程)定义,实现模块接口的所有功能,
从形式上和实际效果上满足模块接口的要求。
2.1.1 数据类型和数据构造
类型(数据类型)是程序设计领域最重要的基本概念之一。在程序里描述的、通过计算机
去处理的数据,通常都分属不同的类型,例如整数或浮点数等。每个类型包含一集合法的数据
对象,并规定了对这些对象的合法操作。各种编程语言都有类型的概念,每种语言都提供了一
组内置数据类型,为每个内置类型提供了一批操作。
以Python 为例,它提供的基本类型包括逻辑类型bool 、数值类型int 和float 等、字符串
类型str ,还有一些组合数据类型。类型bool 包括两个值(两个对象)True 和False ,可用操作
包括and、or 和not ;数值类型int 包含很多值(整数对象),对它们可做加减乘除等运算;其他
类型的情况相仿。开发程序时,应该根据需要选择合适的数据类型。
但是,无论编程语言提供了多少内置类型,在处理较为复杂的问题时,程序员或早或晚
都会遇到一些情况,此时各种内置类型都不能满足或者不适合于自己的需要。在这种情况下,
编程语言提供的组合类型有可能帮助解决一些问题。例如,Python 为数据的组合提供了list、
tuple 、set、dict 等结构(它们也看作是类型),编程时可以利用它们把一组相关数据组织在一起,
抽象数据类型和Python 类 35
构成一个数据对象,作为一个整体存储、传递和处理。
举个例子,假设程序里需要处理有理数。最简单朴素的想法是用两个整数表示一个有理
数,分别表示其分子和分母,在此基础上实现所需要的运算和操作。在这种安排下,把有理数
3/5 存入变量可能写成:
a1 = 3
b1 = 5
利用Python 函数可返回多对象元组和多项赋值的机制,加法函数可以如下定义:
def rational_plus(a1, b1, a2, b2):
num = a1*b2 + b1*a2
den = b1*b2
return num, den
下面是一个简单的函数使用实例:
a2, b2 = rational_plus(a1, b1, 7, 10)
不难想到,如果真这样写程序,很快就会遇到非常麻烦的管理问题:编程者需要时时记住
哪两个变量记录的是一个有理数的分子和分母,操作时不能混淆不同的有理数;如果需要换一
个有理数参与运算,也会遇到成对变量名的代换问题。程序比较复杂时,做这类事情很容易出
错,而如果真发现程序有错误,确定错误的位置和更正也将极其费时费力。总而言之,用独立
的分别存在的
文档评论(0)