[問題] 請教關於Axel-Tobias Schreiner的OOP一書

看板C_and_CPP (C/C++)作者 (brotherD)時間8年前 (2017/08/15 15:31), 8年前編輯推噓6(6028)
留言34則, 7人參與, 最新討論串1/1
小弟最近在拜讀Axel-Tobias Schreiner的Object-oriented Programming in ANSI-C, 殊不知看不太懂作者想要表達的想法與觀念,故想上網請教前輩們。 附上pdf網址:https://www.cs.rit.edu/~ats/books/ooc.pdf 在PDF第7頁,"Alternatively, we can define a data type as a set of values plus operations to work with them." data type可以定義為一組數值+上與數值的運算,不太懂這句話想要表達的含意是什麼(註 :我只會C,不會C++) 對我來說data type就是最基本的int, char,double與float,其餘像是array, struct, union都是最基本的延伸的變化型。 接著在下列的這句話"Typically, the values are what a computer can represent, and the operations more or less reflect the available hardware instructions. int in ANSI-C does not do too well in this respect: the set of values may vary between machines, and operations like arithmetic right shift may behave differently." 第二句看不懂,operation體現出可使用的硬體指令?為什麼ANSI-C的int在這方面做得不太 好?是哪方面? 接著,"More complicated examples do not fare much better. Typically we would define an element of a linear list as a structure" 作者說明更複雜的data type進展的也不是很好,並舉例了一個例子: typedef struct node { struct node * next; ... information ... } node; and for the operations we specify function headers like node * head (node * elt, const node * tail); 作者說明,這個方法相當馬虎,好的原則應該是要隱藏data item的representation且只 declare possible manipulations. 問題1: 什麼是 linear list? 為什麼這個struct是linear list的一種? 問題2: head應該是指向一個函式的指標吧? 問題3: 所以operation不是指+ - * /這類的? 問題4: 這個例子的representation of data item是那些東西? 問題5: only declare possible manipulation是指什麼意思? 問題6: 為什麼這個方法會相當馬虎? 哪邊馬虎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.26.157 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1502782305.A.C87.html

08/15 15:38, , 1F
先查一下什麼是linked-list?
08/15 15:38, 1F
我知道什麼是Linked-list ※ 編輯: zzss2003 (60.248.26.157), 08/15/2017 15:40:46

08/15 16:36, , 2F
他的linear list應該跟linked-list是一樣的東西?
08/15 16:36, 2F
我不確定...所以才上來問版友@@ ※ 編輯: zzss2003 (60.248.26.157), 08/15/2017 16:54:59

08/15 19:05, , 3F
這裡的operation應該是指oop的"方法"?
08/15 19:05, 3F

08/15 19:11, , 4F
這裡的data type不好 是因為他沒有包含操作該data的方法
08/15 19:11, 4F

08/15 19:11, , 5F
作者應該認為好的data應該包含"方法"
08/15 19:11, 5F

08/15 19:12, , 6F
像是c++的class那樣
08/15 19:12, 6F

08/15 19:12, , 7F
第二個例子就用struct作一個類似class的封裝
08/15 19:12, 7F

08/15 19:13, , 8F
其中包含了head這個方法
08/15 19:13, 8F

08/15 23:19, , 9F
比如說我要定義 2bits 的正整數型態
08/15 23:19, 9F

08/15 23:21, , 10F
數值有 0 1 2 3, 0+1=1 1+1=2 等等可以列舉16種可能
08/15 23:21, 10F

08/15 23:22, , 11F
資料的表示 跟如何運算的意思啦......
08/15 23:22, 11F

08/15 23:23, , 12F
然後第二段是在靠北說一樣的碼不同機器跑結果不一樣
08/15 23:23, 12F

08/15 23:28, , 13F
其實講這麼多只是盡量希望所有東西都定義清楚
08/15 23:28, 13F

08/16 13:32, , 14F
整段就是在跟你說封裝很重要啦
08/16 13:32, 14F

08/16 14:07, , 15F
謝謝兩位大大的解釋,小弟資質太淺還是看不懂QQ
08/16 14:07, 15F

08/16 14:34, , 16F
這本是好書,第一次看看不懂,後來才慢慢了解作者的
08/16 14:34, 16F

08/16 14:34, , 17F
用意。不過,除了非得用 C 寫程式的場合外,還是用
08/16 14:34, 17F

08/16 14:35, , 18F
C++ 或 Java 比較簡單,有現成的物件系統可用
08/16 14:35, 18F

08/16 15:57, , 19F
想請問N大,我現在在寫嵌入式軟體(純C),這本對我現在
08/16 15:57, 19F

08/16 15:57, , 20F
的幫助大嗎?
08/16 15:57, 20F

08/16 15:58, , 21F
因為之後想要自己玩看看RTOS,很怕對物件導向的觀念不熟
08/16 15:58, 21F

08/16 15:58, , 22F
導致寫出來的OS之後要修改必須要砍掉重練
08/16 15:58, 22F

08/16 16:12, , 23F
嵌入式裝置我沒有碰,可能問問版上其他高手
08/16 16:12, 23F

08/16 16:12, , 24F
基本上,OOP 的作用在協助我們整理程式碼,應該和特定
08/16 16:12, 24F

08/16 16:13, , 25F
領域無關,都會有所幫助
08/16 16:13, 25F

08/16 16:13, , 26F
C 寫 Class,寫熟了就算簡單
08/16 16:13, 26F

08/16 16:14, , 27F
可以多看點 Linux Kernel 程式碼,不少這樣概念寫出來的
08/16 16:14, 27F

08/16 16:15, , 28F
好的程式碼應該看到 structure 就能搞懂邏輯
08/16 16:15, 28F

08/16 18:56, , 29F
我也是寫嵌入式 我對於oop in c的感想
08/16 18:56, 29F

08/16 18:56, , 30F
就是就算不會oop, 但為了維護等原因
08/16 18:56, 30F

08/16 18:56, , 31F
c寫久了你就會自己做一些簡單類似oop的封裝
08/16 18:56, 31F

08/16 18:56, , 32F
這時候再來看oop in c,會有"阿阿我懂我懂"的認同感
08/16 18:56, 32F

08/16 18:59, , 33F
然後我認為 rtos重要的是os觀念
08/16 18:59, 33F

08/16 18:59, , 34F
照著你選的os的framwork來寫即可
08/16 18:59, 34F
我現在就是還在初階段XD沒有啊...阿...嘶我懂我懂的感覺QQ ※ 編輯: zzss2003 (60.248.26.157), 08/18/2017 13:11:25
文章代碼(AID): #1PagDXo7 (C_and_CPP)
文章代碼(AID): #1PagDXo7 (C_and_CPP)