抽象数据类型ADT

来源:互联网 发布:mac book 不能升级 编辑:程序博客网 时间:2024/05/16 04:57
抽象数据类型(abstruct data type,ADT)
ADT的本质其实就是一种对数据结构或算法的描述语言,用“自然语言+编程语言格式”的方式对需要构造的模型来进行描述,有点类似伪代码,其实也可以认为是伪代码的说~~
然而它却不能够直接被编译器编译出应用程序,因为用的是机器无法识别的自然语言,因此ADT能够起到的唯一作用就是类似与草图一样的东西,当我们想要实现某个程序的算法,或是某个数据结构,用ADT的思想来草拟一个大致的框架出来,它比算法流程框图更加的详细,更贴近编程语言,虽然无法通过编译,但是好处就在于不用考虑语法的细节,只要列出主要的重点就可以了。
ADT同时给出了一个非常固定的格式:
ADT 抽象数据类型名
数据对象    
{数据对象的定义}//这其实就是C++类里的成员变量
数据关系
{数据关系的定义}//这是类中的成员变量之间的关系
基本操作
{基本操作的定义}//类中的各种函数的定义
同时基本操作,也就是函数的定义格式为:
返回类型基本操作名(参数表)
比如说:int Process(int argument)
同时ADT的好处在于给定了一个函数必须具有的5个基本要素:
1、输入:对输入数据的说明。
//一般来说输入指的就是函数的参数,我们必须要想微软的MSDN中那样,清晰的给出所有参数的说明,那样写出来的函数别人才会用,在MSDN中这叫做"in"
2、前置条件:描述了操作执行之前数据结构和参数应满足的条件。若不满足,则操作失败,并返回相应出错信息。
//前置条件其实就是这个函数要正常执行需要的条件,一般在函数体内需要定义清楚,这样可以尽可能的保证算法的健壮性,不会因为奇怪的错误而终止,像Windows中的GetLastError()这个函数就可以获得函数返回的错误信息,如果看MSDN中的函数定义,我们会发现,几乎所有的函数都有执行失败时的返回值,返回出错的信息,便于调试。
3、过程:对数据执行的操作
//过程其实就是这个函数功能的核心部分了,也就是一个需要达到的最终目标所要做的事情。通常情况下,我们是考虑不到所有的出错信息的,所以我们可以先把函数的核心部分代码构造好,把主干理清楚,至于细枝末节的出错处理之类的可以在核心功能实现过后在进行添加。很多书籍都有一个通病,就是给出一个函数的代码,前面是各种出错处理的代码,老长老长的,看了很长时间都看不到想要的功能,出书人的意图是好的,就是希望我们考虑到代码的健壮性,算法要够鲁棒,但是作为学习的我们来说,这却是带给我们消磨看下去的兴趣的一个种子。
4、输出:对返回数据的说明。
//通常,一个函数的返回数据并不仅仅只有它的return,还包括这个函数的一些参数,如果参数设置成指针或是引用的形式,那么函数结束之后,指针或是引用对应的参数可能会发生变化,这也是可以作为返回的数据的。如果看MSDN就会发现,有些参数标明了out的属性,说明这个参数是一个作为输出的参数,通常是一个buff
5、后置条件:执行本操作后系统的状态,“系统”可看作是某个数据结构。
//通常函数返回之后,有可能会对其他的函数或是数据结构带来影响,MSDN中有些函数的返回值可以是用作其他函数的参数,MSDN中会说明的很详细。这应该就是所谓的后置条件。

所以ADT给我们带来的是一种思想,一种规范的数据结构设计思想,遵循ADT的规则,我们可以设计出优秀的数据结构,所有的人都能看懂,不过最后的实现还是要用代码来实现,代码实现就比较简单了。
原创粉丝点击