嗨,鲁蛇我看到维基百科对于ADT的描述有点不清楚,故上来发文请教。
网址: https://en.wikipedia.org/wiki/Abstract_data_type
In computer science, an abstract data type (ADT) is a mathematical model for
data types, where a data type is defined by its behavior (semantics) from the
point of view of a user of the data, specifically in terms of possible
values, possible operations on data of this type, and the behavior of these
operations.
我有查过stack overflow关于ADT的定义,读完之后,想法是:
我定义一个全新的资料型别,这个资料型别的"概念"是可以放很多相同型别变量的容器,
而我要求在C语言中(我只会C,所以拿C当例子),创造这个变量的方式(semantic)是:
容器里的资料型别 容器名字[容量];,for example:
int array[3];
同时我定义中括号里面的数字为下标,下标可以代表每个在容器里面的资料的index,同时
也定义如何对这个容器做operation(把容器当作参数丢到function里、利用指标操作容器)
那么,这整个东西叫一个ADT,实作出来的叫CDT(concrete data type),也就是array。
我会问这个问题是因为我不太清楚ADT与物件之间的关系。
我现在想要用C实作一个battery的物件,那我要先定义这个battery要用什么data type表
示、会有什么行为,那我感觉ADT非常相似于物件,但又感觉有一些差别。
拿个实际我卡住的例子:
typedef enum{
BATTERY_UNLOAD,
BATTERY_LOADED,
BATTERY_HEALTHY,
BATTERY_BROKEN,
}BATTERY_STATES;
typedef struct{
uint16_t voltage;
uint16_t current;
uint16_t temperature;
BATTERY_STATES battery_state;
}BATTERY_OBJECT;
在这个例子中,我定义了battery的语意、也定义了battery的operation(可以被指标处理)
,那这不就等于ADT吗?
如果我今天改成用queue放资料:
typedef struct{
queueNode QueueNode;
BATTERY_STATES battery_state;
}BATTERY_OBJECT;
那么,物件就不等于ADT了,因为ADT被包含在物件里。
那请问,我这篇文章在观念上哪边有错误吗?
如果没有错误,那么,物件与ADT之间的关系是?
谢谢各位前辈指教。