美文网首页
抽象数据类型和抽象

抽象数据类型和抽象

作者: 砌月东谷 | 来源:发表于2021-07-13 07:16 被阅读0次

抽象数据类型(ADT),什么是ADT?简单来说,它是一种考虑数据结构的方式;着重于它做了什么,而忽略它是怎么做的,栈和队列都是ADT的例子

抽象数据类型这个属于从何而来?首先看看数据类型这部分,再来考虑抽象

数据类型

它首先表示内置的类型,例如int和double,当讨论一个简单类型时,实际上涉及到两件事:拥有特定特征的数据项和数据上允许的操作,例如,Java中的int类型变量是整数,可以进行各种加减操作等等,数据类型允许的操作是它本身不可分离的部分,理解类型包括理解什么样的操作可以应用在该类型之上

更广泛一点,当一个数据存储结构例如栈和队列被表示为一个类时,它也成为了一个数据类型。栈和int类型在很多不同方面都不同,但它们都被定义为一组具有一定排列规律的数据和在此数据上的操作的集合

抽象

抽象这个词的意思“不考虑细节的实现和描述”。抽象是事物的本质和重要特征。例如总办公室是一个抽象,它并不考虑哪一个人碰巧成为这个办公室的主人,因此在面向对象编程中,一个抽象数据类型是一个类,而且不用考虑它的实现,它是对类中数据的描述和能够在数据上执行的一系列操作,一级如何使用这些操作的说明,每个方法如何执行任务的细节肯定不包括在内。作为类的用户,只会被告知哪些方法可以调用

ADT

ADT的概念在软件设计过程中也是有用的。如果需要存储数据,那么久从考虑需要在数据上实现的操作开始。需要存取最后一个插入的数据项吗?还是第一个?是特定值的项?还是在特定位置的项?回答这些问题会引出ADT的定义。只有在完整定义了ADT后,才应该考虑细节问题,例如如何标识数据,如何编码使方法可以存储数据等等

通过从ADT规范中剔除实现的细节,可以简化设计流程。在未来的某个时刻,易于修改实现。如果用户只接触ADT接口,应该可以在不干扰用户代码的情况下修改接口的实现

当然,一旦设计好ADT,必须仔细选择内部的数据结构,以使规定的操作的效率尽可能高。例如,如果需要随机存取N元素,那么用链表标识就不够好,因为对链表来说,随机访问不是一个高效的操作,选择数组会得到较好的效果

ADT只是一个概念性的工具。数据存储结构不能截然地分成一些是ADT,另一些用来实现ADT。例如,链表不需要封装成一个列表接口才可用,它本身就可以作为一个ADT,然而它也可以实现其他数据类型,例如队列。链表能够用数组实现,一个数组类型的结构也可以用链表实现,在给定环境下,必须确定什么是ADT,什么是更基本的结构

相关文章

网友评论

      本文标题:抽象数据类型和抽象

      本文链接:https://www.haomeiwen.com/subject/mtsjpltx.html