我最早接触计算机编程的时候,用的是IBM PC ROM上的机载BASIC,即盖茨使用的那个东西,刚有DOS,还不叫MS-DOS,那时叫PC-DOS,用360K软盘启动的。
总之,我告诉你,写C熟练了的人,自然会生出面向对象的念头。其实,可能现在你脑子中都有,只是没意识那是面向对象的东西而已。面向对象是什么东西呢?是每个人思维的天然方式!我们如何认识一辆汽车的?是整体认识的,不会把它拆分成车轮、车厢、马达、颜色、品牌等等东西,一说奥迪A8,你头脑中出现的是什么东西,那就是一个整体对象,包括这种车的性能之类。面向对象的编程,是把这样的一个“类”封装成完整的概念,里面包括属性、方法、输入输出机制等,形成一个黑箱。C语言中没有日期型数据类型,你写了那么多程序,有没有自发地生出“如果能够有一套针对日期数据的运算模型就好了”这样的念头?你会不会希望,输入两个日期型数据,用加减法就可以计算出它们之间相隔多少天、或者算出一个日期100天后是哪一天?我可以判定,很多人都会有这种念头,也想尽各种办法去实现它。在你构造emum月份中每月日数这样的数据结构时,就是在实现这种目的,只是它仅仅是日期型数据的要求之一,还不是全部,我们希望实现所需的一切,把它们都封装进一个叫DATE的数据类型中,在scanf()时,可以接受日期型数据的格式,就如接受int数据的&i一样,能够通过DATE d变量声明时对&d接收数据,它能够自动拒绝2月30日这样的输入,也自动判断某年是不是闰年。这就是面向对象的目标,谁说自己写C的没这种愿望?
ANSI版本的C++规范也没有这种现成的数据类型,但C++的重点是提供了实现所需的办法。是我们有没有想到这种需要的问题,不是语言给你用什么的问题,好的程序员和差的程序员,分野点就在这里,前者使用语言,后者被语言使用。差的程序员,不惜功力反复写同类代码,而好的程序员,是力图写出重复可用的代码。日期型数据的构造再艰难,也是一次性的,实现之后使用就轻松了,对差的程序员,他想不周全,就觉得为了一些细微的区别反复写类似的代码是必需的,没有解决的办法。
[
本帖最后由 TonyDeng 于 2011-8-4 17:23 编辑 ]