之前看完骏豪写的《C语言实现面向对象编程》,同时发现最近blog没有高质量的编程系文章orz,于是就一直想写篇东西谈谈语言和设计,,也算是对自己做程序和OOAD的经验教训小结
打好草稿之后发现又长又臭,索性换一种短而快的方式——分节,一来好写,二来免得大家懒得看=_,=
PS:貌似我还欠着n篇游戏特效制作的文章。。。囧
首先更正骏豪的几个错误观点:P
1.面向对象和基于对象是两个不完全相同的东西。
基于对象就是类最基本的特征,将数据和方法绑定到一起。
在C这样没有类的语言中可以用一个结构表示一个类的数据,然后在所有与之相关的函数(方法)中传入这个结构(或指针),也能达到同样的效果,典型例子如C标准库的FILE
另外Win32API中采取的是句柄,即用一个数值作为对象的ID,去代替你操作的对象,同样能达到封装数据的目的。
但是这并未达到面向对象的程度
面向对象是在基于对象的基础上做到继承和多态,尤其是多态,这是与基于对象的本质区别,也是面向对象与结构化编程最不同的地方
C可以实现多态,方法是定义一个struct,包含若干函数指针,然后由函数指针指向具体的函数以实现多态
然而要真正实现多态,那么需要衍生出很多“周边产品”——运行时类型检查(RTTI,例如C#的is关键字)、反射等等。这点要在C语言实现只能用取巧的办法,例如自动分配类的id然后查id来匹配,或者用宏等等。
具体可以参考GTK,它的编写风格是面向对象,也支持RTTI。
所以Windows至少从API的设计看来并不是面向对象。
2.C++ is better than C? OO is better than structral programming?
没有面向对象,甚至没有基于对象,我们真的写不出一个大型的程序吗?
我想大部分初学C++的人都会接受这么一种观点:C++是更好的C语言(很不幸连张锋也这么跟我们说。。囧),至少你爱用OO的特性就用,不爱就当它是C来用。
类似地,面向对象(OO)才是王道,结构化编程纯属老土——这样的观点也充斥于很多C++新手甚至是有相当经验的人士当中。
我写这段并非想争论C和C++孰优孰劣。理解如何通过C语言进行高质量编程对程序设计有非常大的帮助,包括面向对象的能力。
我先把问题放这:C语言+结构化编程能写高质量的大型程序。问题是怎么写?
下回自有分晓
打好草稿之后发现又长又臭,索性换一种短而快的方式——分节,一来好写,二来免得大家懒得看=_,=
PS:貌似我还欠着n篇游戏特效制作的文章。。。囧
首先更正骏豪的几个错误观点:P
1.面向对象和基于对象是两个不完全相同的东西。
基于对象就是类最基本的特征,将数据和方法绑定到一起。
在C这样没有类的语言中可以用一个结构表示一个类的数据,然后在所有与之相关的函数(方法)中传入这个结构(或指针),也能达到同样的效果,典型例子如C标准库的FILE
另外Win32API中采取的是句柄,即用一个数值作为对象的ID,去代替你操作的对象,同样能达到封装数据的目的。
但是这并未达到面向对象的程度
面向对象是在基于对象的基础上做到继承和多态,尤其是多态,这是与基于对象的本质区别,也是面向对象与结构化编程最不同的地方
C可以实现多态,方法是定义一个struct,包含若干函数指针,然后由函数指针指向具体的函数以实现多态
然而要真正实现多态,那么需要衍生出很多“周边产品”——运行时类型检查(RTTI,例如C#的is关键字)、反射等等。这点要在C语言实现只能用取巧的办法,例如自动分配类的id然后查id来匹配,或者用宏等等。
具体可以参考GTK,它的编写风格是面向对象,也支持RTTI。
所以Windows至少从API的设计看来并不是面向对象。
2.C++ is better than C? OO is better than structral programming?
没有面向对象,甚至没有基于对象,我们真的写不出一个大型的程序吗?
我想大部分初学C++的人都会接受这么一种观点:C++是更好的C语言(很不幸连张锋也这么跟我们说。。囧),至少你爱用OO的特性就用,不爱就当它是C来用。
类似地,面向对象(OO)才是王道,结构化编程纯属老土——这样的观点也充斥于很多C++新手甚至是有相当经验的人士当中。
我写这段并非想争论C和C++孰优孰劣。理解如何通过C语言进行高质量编程对程序设计有非常大的帮助,包括面向对象的能力。
我先把问题放这:C语言+结构化编程能写高质量的大型程序。问题是怎么写?
下回自有分晓
浙公网安备 33010602011771号