如何区分数据结构和抽象数据类型?
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 中称为对象)
ADT(又名接口)是一个合同。不代表执行。
WRT 你的简单 class,ADT 会像这样:
class ISimple {
public:
void some_simple_action() = 0;
};
如果您从中派生出 "Simple" class,您就可以在合同需要 ISimple 的任何地方注入它。
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 中称为对象)
ADT(又名接口)是一个合同。不代表执行。
WRT 你的简单 class,ADT 会像这样:
class ISimple {
public:
void some_simple_action() = 0;
};
如果您从中派生出 "Simple" class,您就可以在合同需要 ISimple 的任何地方注入它。