|
|
|
| 抽象数据类型 |
| abstract data type |
ChouxiQng shUjU leixing
抽象数据类型(abstract data勺pe)与表示
无关的数据类型。数据类型由一个对象集合(值集)
和在该集合上定义的若干合法运算所组成的运算集
合组成。抽象数据类型用数学方法定义对象集合和
运算集合,仅通过运算的性质刻画数据对象,而独立
于计算机中可能的表示方法。其目的在于隐蔽运算
实现细节和内部数据结构,同时向用户提供该数据
类型的完整信息。
抽象数据类型的概念是逐步形成的。60年代
末到70年代,人们将用户自定义的类型称作抽象数
据类型。传统的算法语言没有用户自定义类型的设
施。到60年代末,为了实现算法细节和数据内部结
构的隐蔽,SIMIJLA67语言中引人了类,随后出现
了模块概念。模块可分成模块式和模块体,模块式
定义外部可见的运算接口,模块体对外不可见,其中
可定义私有的数据结构和运算。通过接口和实现的
分离,模块提供了用户自定义类型的手段,达到数据
抽象、信息隐蔽的目的。在这个意义下,模块所定义
的数据类型称作抽象数据类型。实际上,模块提供
了一种抽象数据类型实现的手段。这种手段在
入玉月ula-2,八da等语言中得到进一步的完善和发展。
用户自定义数据类型的另一优点是设计与实现相分
离,可将模块式看作设计规约,而模块体是相应的实
现。这种分离推动了软件规约的研究,也进一步推
动了抽象数据类型的研究。
当用一个数据类型去模拟一类客观对象时,可
先给出该类型的性质和功能的描述,然后用已有的
语言设施和数据类型实现所需的功能,并证明实现
的正确性。仅通过模块式描述数据类型的型构是不
够的,还必须用抽象的方法完整地描述对象的性态
和功能。这就是用抽象数据类型表示功能规约。这
时,抽象数据类型完全独立于具体表示,反映出纯抽
象的性质。抽象数据类型的规约方法主要有二:其
一是代数方法;其二是模型方法。代数方法基于G.
Birkhoff,J .D.LipSOn等的异调代数理论,经5.21115,
J.A.Guttag等人的发展,其理论基础日趋完善,并逐
步应用于软件工程实践,成为有代表性的抽象数据
类型规约方法。模型方法基于C.A.R.HOare的前
后断言方法,它通过已定义的(抽象)数据类型来给
出所要定义的新类型的抽象模型。
采用代数方法,抽象数据类型的规约由两部分
组成,一是语法部分,二是公理部分。语法部分给出
了抽象数据类型的名及其上运算的定义域和值域,
公理部分则通过给出一组刻画各运算之间相互关系
的方程来定义各运算的含义。从语义的角度,代数
规约的语义是一类代数。在语法正确的基础上,语
义正确性是指相应代数满足规约中公理部分的所有
公理。通常,具语义正确性的语义模型代数有多个
且形成一个谱,谱的两端分别称为始语义模型和终
语义模型。该谱系为实现者提供了较大的灵活性。
基于代数方法的规约语言有OBJ,Clear等。例如用
()印写的堆栈定义如下:
obj stack;
sort stack八nteger瓜刀1~;
ok一OPS
ptlsh:staek,integer~stack;
pop:staek~staek;
top:stack~integer;
erllPty:stack~h刀1~;
newstaek:~staek;
depth:stack~integer:hidden;
en均T-OPS
underflow一stack;
no一1llore~Integer;
。verflow~staek;
。l}以1115
lx〕p(push(s,it。))=S;
toP(push(s,it。))=itern:
曰111〕ty(newstaek)=true;
助pty(push(s,item))=几1女;
depth(ne叭飞切ck)=0;
depth(push(s,item))=1+depth(s);
曰叮Or一阂ps
pop(ne叭飞tack)=unde闭ow;
toP(ne叭侣tack卜no一~“;
push(s,it。)=。讹川溯ifd印th(s))
100;
job
模型方法不是对抽象数据类型中运算的性质加
以直接刻画,而是通过某些基本类型和已定义的(抽
象)数据类型来给出所要定义的新类型的抽象模型,
用已定义的运算的性质来间接刻画要定义的数据类
型中运算的特性。一般说来,抽象数据类型的模型
规约由以下三部分组成:①状态集的定义(可能包
含不变式);②初始状态定义(通常只有一个);③
运算集的定义,通常采用输入输出断言刻画。值得
注意的是,模型只能理解成行为的描述而与具体实
现无关。但如果不加注意,模型规约可能引人与实
现有关的内容。由于这种方法与正确性证明方法有
较直接的对应,因此,在规约语言中得到了广泛的应
用。如Z,VDM等。
抽象数据类型能够从抽象的角度描述客观对象
的性态,满足信息隐蔽、功能抽象、设计在前、方便验
证等软件工程的要求。其理论对软件规约、正确性
证明等课题的研究均具有重要意义,对面向对象语
言的发展产生了重要的影响。 ...... |
|