[问题] 请教关于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