抽象数据类型(Abstract Data Type,ADT)是中计算机科学具有类似行为的特定类别的数据结构的数学模型;或者具有类似语义的一种或多种的数据类型。抽象数据类型是间接定义的,通过其上的可执行的操作以及这些操作的效果的数学约束(与可能的代价)。
ADT的特性:不变量;表示泄露;抽象函数AF;表示不变量RI
①
creator(构造器):
输入一些其它类型的对象,创建一个该
ADT
对象。例如创建一个新集合
new()。
或者现实中的构造函数。
②
producer(产生器):从一个存在的同样的数据类型产生一个新对象。
③
observer(观察器):
通过该
ADT
本身的数据以及传入参数,计算得到其它类型的值。例如检查
集合里是否有
x
的方法
find(x)
。
④
mutator(变值器):修改ADT内部数据。
表示独立性:client使用ADT时不需要考虑其内部如何实现,ADT内部表示的变化不应该影响spec和客户端。(用户只依赖规约,不依赖ADT的具体实现)
ADT需要始终保持不变量:保持程序的正确性,容易发现错误。
RI和AF:
ADT开发者关注的表示空间为R,client关注的抽象空间为A。RI描述了R中的某个子集是合法的,而AF则描述这个子集中的值是如何映射到抽象空间中的某个值。R中的非法子集在A中是没有映射的。
作为一种映射,AF为满射,并非单射,也不一定是双射。
而对于同样的R,可能有不同的RI。
同样的,对于同样的R和RI,也会存在着不同的AF。
设计ADT时:(1)选择R和A
(2)RI合法子集的选择
(3)AF解释合法子集
RI的定义:应该是一个真假值,布尔类型,及一个逻辑表达式
检查RI:随时检查RI是否满足,所有可能改变R的方法内都要检查。
对不可变的ADT来说,有的时候,其内部表示空间R可以变化:比如在运算时,存在公约数,可以先将其简化。对于client来说,A并未改变,此种改变是无害的,是有益的。