嗨,魯蛇我看到維基百科對於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之間的關係是?
謝謝各位前輩指教。