[問題] 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