如何区分数据结构和抽象数据类型?

How do I distinguish between data structures and abstract data types?

Dale 和 Walker 的抽象数据类型 (1996) 中的以下定义:

Data Structures: the implementation of structured relationships.

ADTs (abstract data types): classes of objects whose logical behavior is defined by a set of values and set of operations.

所以,让我们在 C++ 中使用一个简单的 class:

class Simple {
public:
        void some_simple_action();

private:
        int x, y;
};

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

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

我的想法正确吗?

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

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

A​​DT(又名接口)是一个合同。不代表执行。

WRT 你的简单 class,ADT 会像这样:

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

如果您从中派生出 "Simple" class,您就可以在合同需要 ISimple 的任何地方注入它。