[问题] Abstract data type与物件的关系?

楼主: zzss2003 (brotherD)   2018-03-12 11:54:29
嗨,鲁蛇我看到维基百科对于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之间的关系是?
谢谢各位前辈指教。
作者: Ommm5566 (56天團)   2018-03-12 12:50:00
ADT其实就是封装概念一种 使用者不需要知道实际行为第一段最后一行就说了 一般的DS是大家知道实作细节的比如queue, list, heap 一喊出来你就会知道他的底层是
作者: Hazukashiine (私は幸せです)   2018-03-12 12:52:00
我们一般称 stack queue 等为 ADT 大概就这样而已
作者: Ommm5566 (56天團)   2018-03-12 12:52:00
sequential, reference, tree
作者: flowwinds (..)   2018-03-12 13:07:00
ADT定义中写用此资料型别会如何被使用及操作来定义它,而不着重此资料型别实际上用什么方式(阵列或串行)实现
作者: MOONRAKER (㊣牛鹤鳗毛人)   2018-03-12 14:11:00
学一学资料结构,不要用看的。还有你既然有看到wiki 那就看一下底下Examples里面有哪一些东东 基本上你就记得要复杂到那样才会叫ADT非常多 我在图书馆借来看过

Links booklink

Contact Us: admin [ a t ] ucptt.com