【问题标题】:Difference between ADT and Classes?ADT和类之间的区别?
【发布时间】:2014-02-26 02:32:37
【问题描述】:
ADT is the set of operations. ADT's are mathematical abstractions.

这是否意味着 ADT 与类相同,还是我将两者混淆在一起?

【问题讨论】:

    标签: c data-structures abstract-data-type


    【解决方案1】:

    类是抽象数据类型 (ADT) 的实现。

    【讨论】:

      【解决方案2】:

      ADT 是通过提供最小的预期接口和方法集来对数据结构进行分类的方式

      ADT's = 一组值 + 操作 示例堆栈、队列

      【讨论】:

      • 你的意思是“一组类型”?
      【解决方案3】:

      抽象数据类型 (ADT) 是对现实世界事物的数学抽象,可以用不同语言以具体数据类型实现。

      ADT 定义给定类型的操作并以数学方式表达它们的行为。 ADT 的具体实现可能彼此不同。这样,类实现了 ADT,方法实现了操作。

      类的术语与 ADT 略有不同,并添加了其他特征,例如:

      • 例如,它们可能存在于 包中
      • 他们的成员被称为attributesmethods
      • 属性和方法有一定的可见性约束

      和方法:

      • 也可以是抽象的。但是,他们的行为没有被定义——只有他们的方法签名——继承的具体类必须提供一个实现

      不要将抽象数据类型与具体语言中的抽象类混淆。

      【讨论】:

        【解决方案4】:

        根据 Code Complete,ADT 是数据和对这些数据进行操作的集合。

        ADT 示例:

        列表

        • 初始化列表
        • 在列表中插入项目
        • 从列表中删除项目
        • 从列表中读取下一项

        ADT 构成了类概念的基础。在支持类的语言中,您可以将每个抽象数据类型实现为它自己的类。 通常涉及继承和多态的附加概念。将类视为抽象数据类型加上继承和多态的一种方式。

        【讨论】:

        • 这应该是选择的正确答案!
        【解决方案5】:

        区别的关键在于抽象。把 ADT 想象成一个接口——一个只有方法声明的类,没有实现细节。

        例如,Stack ADT 定义了基本的堆栈操作,例如 push 和 pop(但没有说明这些操作应该如何实现),而 Stack 类将使用链表或数组来实际实现这些操作操作。

        【讨论】:

        • 好的。所以 Stack 类将是我的数据结构 + 面向对象的概念,我用于实现如链表或数组。但是,当我们导入一个包含所有类的包时,是否对导入包的用户隐藏了实现?这不会使类名也成为 ADT 吗?我希望我的问题很清楚。
        • @Bernhard 但是,为什么不能将一个类视为 ADT?
        • @SMVaidhyanathan 一旦有了具体的实现,根据定义,它就不再是抽象的(因此不能是抽象数据类型)。这就像定义冰淇淋是什么(类似于 ADT)的属性列表(如质地、外观和制成)与如何制作特定类型冰淇淋的配方之间的区别(就像课堂一样)。实际的冰淇淋就像物体一样。
        • @subinsahayam 你可以调用一个类的方法之一或它的一个对象,并且它会以某种方式运行,这可能意味着它不再是抽象的。实现细节仍然存在,它会影响类及其对象的行为方式以及它可能具有的其他方法,即使您无法直接看到实现细节。
        猜你喜欢
        • 2013-10-05
        • 2011-03-30
        • 1970-01-01
        • 1970-01-01
        • 2017-10-02
        • 2011-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多