【问题标题】:How do I distinguish between data structures and abstract data types?如何区分数据结构和抽象数据类型?
【发布时间】:2020-05-05 10:25:19
【问题描述】:

Dale 和 Walker 的 Abstract Data Types (1996) 中的以下定义:

数据结构:结构化关系的实现。

ADT(抽象数据类型):其逻辑行为是 由一组值和一组操作定义。

那么,让我们在 C++ 中创建一个简单的类:

class Simple {
public:
        void some_simple_action();

private:
        int x, y;
};

Simple 必须是一种数据结构,因为它是一种实现,对吗?关于这个类,它的抽象数据类型是什么?

其次,我是否正确地推测 ADT 只是某物的概念表示:就像我们可以通过名称调用某物的概念一样?例如,对于堆栈是什么有一个共同的想法,甚至是形式/逻辑概念。如果我用给定的编程语言实现一个堆栈,那么我现在写的就是一个数据结构(这种抽象数据类型)。

我的想法正确吗?

【问题讨论】:

  • "Simple 必须是数据结构,因为它是一种实现,对吗?" 什么的实现?这里的结构化关系是什么?
  • 如果你熟悉OO编程中的接口概念,那么粗略的说ADT就像一个接口,一个数据结构就像一个非抽象类。数据结构由其内部实现细节定义,但 ADT 由它支持的操作以及它们的输入/输出应该是什么来定义。
  • 比如说你在模拟一个农场。您将创建一个 Animal 类,然后为 Sheep、Cow、Pig 等创建子类...您可以将 Pig 添加到农场,但可能不是 Animal,你知道吗?所以从这个意义上说,Animal 是一个不会被直接实例化的类,因此它是抽象的。
  • 另外,对 25 年前的 C++ 术语持保留态度——从那时起,事情已经走过了漫长的道路。

标签: c++ data-structures computer-science abstract-data-type


【解决方案1】:

在大多数情况下 - 你的想法是正确的。

在高层次上,具体的数据类型是一个概念,它允许您制造实例(在 OO 中称为对象)

一个 ADT(又名接口)是一个合约。它并不意味着实施。

WRT 你的 Simple 类,ADT 就像这样:

class ISimple {
public:
        void some_simple_action() = 0;
};

如果你从中派生“Simple”类,你就可以在合约需要 ISimple 的任何地方注入它。

【讨论】:

  • 这里缺少关键字virtual吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多