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

作者: zzss2003 (brotherD)   2017-08-15 15:31:40
小弟最近在拜讀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: 為什麼這個方法會相當馬虎? 哪邊馬虎?
作者: james732 (好人超)   2017-08-15 15:38:00
先查一下什麼是linked-list?他的linear list應該跟linked-list是一樣的東西?
作者: chuegou (chuegou)   2017-08-15 19:05:00
這裡的operation應該是指oop的"方法"?這裡的data type不好 是因為他沒有包含操作該data的方法作者應該認為好的data應該包含"方法"像是c++的class那樣第二個例子就用struct作一個類似class的封裝其中包含了head這個方法
作者: longlongint (華哥爾)   2017-08-15 23:19:00
比如說我要定義 2bits 的正整數型態數值有 0 1 2 3, 0+1=1 1+1=2 等等可以列舉16種可能資料的表示 跟如何運算的意思啦......然後第二段是在靠北說一樣的碼不同機器跑結果不一樣其實講這麼多只是盡量希望所有東西都定義清楚
作者: legendmtg (CLANNAD)   2017-08-16 13:32:00
整段就是在跟你說封裝很重要啦
作者: zzss2003 (brotherD)   2017-08-16 14:07:00
謝謝兩位大大的解釋,小弟資質太淺還是看不懂QQ
作者: Neisseria (Neisseria)   2017-08-16 14:34:00
這本是好書,第一次看看不懂,後來才慢慢了解作者的用意。不過,除了非得用 C 寫程式的場合外,還是用C++ 或 Java 比較簡單,有現成的物件系統可用
作者: zzss2003 (brotherD)   2017-08-16 15:57:00
想請問N大,我現在在寫嵌入式軟體(純C),這本對我現在的幫助大嗎?因為之後想要自己玩看看RTOS,很怕對物件導向的觀念不熟導致寫出來的OS之後要修改必須要砍掉重練
作者: Neisseria (Neisseria)   2017-08-16 16:12:00
嵌入式裝置我沒有碰,可能問問版上其他高手基本上,OOP 的作用在協助我們整理程式碼,應該和特定領域無關,都會有所幫助
作者: dou0228 (7777)   2017-08-16 16:13:00
C 寫 Class,寫熟了就算簡單可以多看點 Linux Kernel 程式碼,不少這樣概念寫出來的好的程式碼應該看到 structure 就能搞懂邏輯
作者: chuegou (chuegou)   2017-08-16 18:56:00
我也是寫嵌入式 我對於oop in c的感想就是就算不會oop, 但為了維護等原因c寫久了你就會自己做一些簡單類似oop的封裝這時候再來看oop in c,會有"阿阿我懂我懂"的認同感然後我認為 rtos重要的是os觀念照著你選的os的framwork來寫即可

Links booklink

Contact Us: admin [ a t ] ucptt.com