了解抽象数据类型

Posted userrrr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了了解抽象数据类型相关的知识,希望对你有一定的参考价值。

 

  抽象数据类型(Abstract Data Type 简称ADT)是指一个数学模型以及定义在此数学模型上的一组操作。抽象数据类型需要通过固有数据类型(高级编程语言中已实现的数据类型)来实现。抽象数据类型是与表示无关的数据类型,是一个数据模型及定义在该模型上的一组运算。对一个抽象数据类型进行定义时,必须给出它的名字及各运算的运算符名,即函数名,并且规定这些函数的参数性质。一旦定义了一个抽象数据类型及具体实现,程序设计中就可以像使用基本数据类型那样,十分方便地使用抽象数据类型。

在早期的编程语?中,?户只能??定义?法,?所有的类型都是规定好的(例如int、boolean、String等等)。 ?现代编程语?允许?户??定义类型对数据进?抽象,这是软件开发中的?个巨?进步。

对数据进?抽象的核?思想就是类型是通过其对应的操作来区分的:?个整型就是你能对它进?加法和乘法的东 ?;?个布尔型就是你能对它进?取反的东?;?个字符串就是你能对它进?链接或者取?字符串的东?,等等。 在?定意义上,?户在以前的编程语?上似乎已经能够定义??的类型了,例如定义?个名叫Date的结构体,?? ?int表?天数和年份。但是真正使得抽象类型变得新颖不同的是对操作的强调:?户不?管这个类型??的数据是 怎么保存表?的,就好像是程序员不?管编译器是怎么存储整数?样。起作?的只是类型对应的操作。

和很多现代语??样,在Java中内置类型和?户定义类型之间的关系很模糊。例如在 java.lang 中的类 Integer 和 Boolean 就是内置的——Java标准中规定它们必须存在,但是它们的定义?是和?户定义类型的? 式?样的。另外,Java中还保留了原始类型,它们不是类和对象,例如 int 和 boolean ,?户?法对它们进? 继承。

对于类型,不管是内置的还是?户定义的,都可以被分为可改变 不可变两种。其中可改变类型的对象能够被改 变:它们提供了改变对象内容的操作,这样的操作执?后可以改变其他对该对象操作的返回值。所以 Date 就是 可改变的,因为你可以通过调? setMonth 操作改变 getMonth 操作的返回值。但 String 就是不可改变的, 因为它的操作符都是创建?个新的 String 对象?不是改变现有的这个。有时候?个类型会提供两种形式,?种是可改变的?种是不可改变的。例如 StringBuilder 就是?种可改变的字符串类型。

 抽象类型是通过它的操作定义的. 对于类型T来说,它的操作集合和规格说明完全定义和构造了它的特性。例如,当我们谈到 List 类型时,我们并 没有特指?个数组或者链接链表,?是?系列模糊的值——哪些对象可以是 List 类型——满?该类型的规格说明 和操作规定,例如 get() , size() , 等等。

  那么,如何设计抽象类型呢?

  设计?个抽象类型包括选择合适的操作以及它们对应的?为,有?个重要的规则。

1.设计少量,简单,可以组合实现强?功能的操作??设计很多复杂的操作。

2.每个操作都应该有?个被明确定义的?的,并且应该设计为对不同的数据结构有?致的?为,?不是针对某些特殊 情况。例如,或许我们不应该为 List 类型添加?个 sum 操作。因为这虽然可能对想要操作?个整数列表的?户 有帮助,但是如果?户想要操作?个字符串列表呢?或者?个嵌套的列表? 所有这些特殊情况都将会使得 sum 成为 ?个难以理解和使?的操作。

3.操作集合应该充分地考虑到?户的需求,也就是说,?户可以?这个操作集合做他们可能想做的计算。?个较好测 试?法是检查抽象类型的每个属性是否都能被操作集提取出来。例如,如果没有 get 操作,我们就不能提取列表 中的元素。抽象类型的基本信息的提取也不应该特别困难。例如, size ?法对于 List 并不是必须的,因为我们 可以? get 增序遍历整个列表,直到 get 执?失败,但是这既不?效,也不?便。

4.抽象类型可以是通?的:例如,列表、集合,或者图。或者它可以是适?于特定领域的:?个街道的地图,?个员 ?数据库,?个电话簿等等。但是?个抽象类型不能兼有上述?者的特性。被设计?来代表?个纸牌序列的 Deck 类型不应该有?个通?的 add ?法来向类型实例中添加任意对象,?如整型和字符串类型。反过来说,对于像 dealCards 这样的只对特定领域(译者注:纸牌游戏)有效的?法,把它加? List 这样的通?类型中也是没有意义的。

 

 

毫无疑问,抽象数据类型大大的扩大了我们所能操做的变量的范围。通过抽象数据类型,我们拥有了定义属于自己的变量的机会,并能根据我们的所需向其中添加任何的属性以及函数。抽象数据类型毫无疑问地大大降低了我们地编程难度,能够更自由简单地使用各种功能,仅仅只需要通过变量本身便能实现很多操做。抽象数据类型让我们地编程更加得心应手,也更加地有趣。

以上是关于了解抽象数据类型的主要内容,如果未能解决你的问题,请参考以下文章

java数据类型

Redis5数据类型6-Stream

Java技术分享:Java基本数据类型

如何掌握Java基本数据?

第一章学习小结

026 面向对象05——封装