2.1 抽象数据类型

函数-》功能的抽象【侧重于计算】
抽象数据类型-》数据的抽象,对一类数据进行操作。【侧重于数据处理】
【二者之间的界限不是很明显】

  • 接口

通过接口描述说明这个程序的可用功能,通过声明指定要求的参数,但是并不限制功能的实现方法。
调用的时候,不需要指定接口的任何具体细节,只需要提供相关的参数即可。

2.1.1 数据类型和数据构造

数据类型,是非常重要的概念。
每个类型包含一簇合法的数对象,并规定了对这些对象的合法操作。
有内置的数据类型(int、bool等)和组合数据类型(list、tuple等,方便组织数据)之分。

  • 程序处理有理数的例子【组织数据的必要性】

image.png
缺点在于:管理方面比较麻烦,需要记住哪对变量代表一个有理数。
image.png
意义方面:没有进行类型检查,也就是说如果其他的比如格点(x,y)也可以和有理数x/y相加,这是非常荒谬的。
类型检查:且没有进行参数的数据检查,Python这个问题比较严重,不知道传来的参数是否符合规范。
使用方面:如果一个元祖有多个数,则很难都记住。
所以我们要使用抽象数据结构的思想来解决这些问题。

2.1.2 抽象数据类型的概念

抽象数据类型,将对一组数据的操作和数据本身隔离开来。【可以理解为对数据操作的严格化,只能进行特定的操作,这些特定的操作映射到现实中的意义】

  • 操作的分类

操作可以分成三类:
image.png
如果没有变动操作,则成为不变数据类型,对象叫做不变对象。

  • 使用

通过类名和方法名使用这些操作。

2.1.3 抽象数据的描述

image.png
其中的ADT表示这个抽象数据类型的描述,Rational是被定义类型的名字随后是操作名,参数名和类型,操作描述等
操作中以Rational作为名字,说明这是一个构造操作,从其他类型的参数出发构造本类型的对象。
操作描述是非形式化的,故而有可能有歧义,这是我们应当避免的。

  • 时间抽象类型的描述:

image.png