C_and_CPP 板


LINE

嗨,鲁蛇我看到维基百科对於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之间的关系是? 谢谢各位前辈指教。 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.248.26.157
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1520826872.A.20D.html
1F:推 Ommm5566: ADT其实就是封装概念一种 使用者不需要知道实际行为 03/12 12:50
2F:→ Ommm5566: 第一段最後一行就说了 一般的DS是大家知道实作细节的 03/12 12:51
3F:→ Ommm5566: 比如queue, list, heap 一喊出来你就会知道他的底层是 03/12 12:51
4F:→ Hazukashiine: 我们一般称 stack queue 等为 ADT 大概就这样而已 03/12 12:52
5F:→ Ommm5566: sequential, reference, tree 03/12 12:52
6F:→ Hazukashiine: 把ADT 跟物件混在一起讨论也是蛮神奇的 03/12 12:52
7F:→ Ommm5566: 而ADT使用者不需要知道底层实作 只要结果符合说明 03/12 12:52
8F:→ Ommm5566: 再更具体一点就是list你会预期有next操作相反的heap却无 03/12 12:54
9F:→ Ommm5566: 这时候就没有封装了 03/12 12:54
10F:→ Ommm5566: 所以你的code跟ADT完全没关系 03/12 12:55
11F:→ Ommm5566: 你贴的网页下面就有C code阿 03/12 12:57
12F:→ Ommm5566: 简单说今天stack可能是用list或用array实作 03/12 12:57
13F:→ Ommm5566: 使用者不用管 只要这个介面保证stack给我push和pop正确 03/12 12:58
14F:→ Ommm5566: 当然用stack/quere/list/heap不是很好的例子 03/12 12:59
15F:→ Ommm5566: 常见的实作就那几种 很容易让第一次看到的人无法理解 03/12 13:01
16F:→ Ommm5566: 封装的概念 03/12 13:01
17F:→ flowwinds: ADT定义中写用此资料型别会如何被使用及操作来定义它, 03/12 13:07
18F:→ flowwinds: 而不着重此资料型别实际上用什麽方式(阵列或串列)实现 03/12 13:09
19F:→ MOONRAKER: 学一学资料结构,不要用看的。 03/12 14:11
20F:→ MOONRAKER: 还有你既然有看到wiki 那就看一下底下Examples里面有 03/12 14:13
21F:→ MOONRAKER: 哪一些东东 基本上你就记得要复杂到那样才会叫ADT 03/12 14:14
不好意思,顺便借问一下,Horowitz的fundamentals of data structures第一版(1981)与 第二版(2007)的内容会差很多吗?我手头只有第一版 ※ 编辑: zzss2003 (60.248.26.157), 03/12/2018 15:39:39
22F:→ MOONRAKER: 非常多 我在图书馆借来看过 03/12 15:53
谢啦~那我去买个第二版来读好了 ※ 编辑: zzss2003 (60.248.26.157), 03/12/2018 16:23:54







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP