前段时间花了三天时间把买了好久《大话设计模式》看了一遍。
单一职责,开放-封装,依赖倒转,里氏代换是面向对象编程之所以有效的原则,它们让软件系统是可复用,可维护,可扩展,灵活性好的。也是这些设计模式所遵守的原则。
看完了,想想应该练习下。可书中都是用面向对象语言实现的(C#,Java等)。可我不怎么用面向对象语言,我就想用C语言来
实现它们。可C语言如何面向对象呢?之前看过有用结构来模拟实现类的,但继承,多态这些怎么弄呢?想起了很久以前瞄过的一本书《OOC》,讲的是用标准c实现面向对象。把c和对象放在一起,大家就会想起C++,是啊!有C++不就行了,为什么要折腾c呢?可就是有很多人对c++不满意,Linux之父Linus就是力挺C而批判C++的。讨厌C++的人似乎认为C++过于复杂,内部机制陷阱过多等等。OOC作者也是由于对c++不满足而转向c。
OOC这本书中主要讲了以下两点:一个发现,一个实现。
1.发现c是完全面向对象的
2.利用c实现面向对象(这里不是用c实现一个面向对象的语言,而是就是用c实现面向对象)
从抽象数据类型说起,到面向对象的要素讨论,最后提出自己的对象模型,推导出了一个类树。包括对象,类,继承,多态,最后还实现了类型检查,异常处理。为了方便编程,作者实现了一个预处理器。这本书对理解面向对象原理,很有帮助。
这里有本书的原文和部分译文下载:http://wiki.chinaunix.net/OOC
我开始看前几章觉得很晦涩难懂,硬着头皮,中文加英文看下去,搞清楚了大概思路,作了一些变化,
自己也写了一个预处理器玩了下,现在也可以很容易定义类,实现继承、多态等。
后来搜索“面向对象理论”,发现一篇自称是扯淡的文章:http://www.iteye.com/topic/89241
我觉得这文章还是很有启发意义的,至少知道了面向对象的历史,发展,知道了有类,无类语言,3P和4P的概念。
看了评论发现《程序设计--实践之路》这本书,这是本讲如何设计语言的书,从编译原理,语言发展,到语言的各种要素。
大概看了下里面“10.数据抽象和面向对象”一章,才知道从基本类型(整数,浮点),函数类型,结构类型,后来发展出
模块类型,按理论,类是从模块类型发展而来,面向对象也应该按此发展。可事实上面向对象的基本要素都是从20世纪60年代
开发的simula语言中来的。
关于c语言实现面向对象,最经典的应该是gtk+了,一个基于C语言的面向对象的图形编程环境。
其中GOjbect就是基于C语言的面向对象的实现,它和glib是gtk+的两大基石。
这里面有很多关于GObject的文章:http://ekd123.is-programmer.com/posts/28754.html
什么时间好好学习下GObject了。