分享
 
 
 

挑战 OOP,挑战 C++ ?

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

(注:本文并非提倡不使用面向对象的设计方法)

面向对象(也就是 OOP )究竟是什么,他真的有那么神奇吗?是不是说有了 C++ 以后,那么 C 就一无是处了,可以淘汰掉?

对于上面的那个问题,相信一部分人已经有了答案。不过,有人会问: OOP 是一种新的编程思想,在它的影响下,计算机编程已经发生了翻天覆地的变化,有必要对它提出质疑吗?

在说明我的观点之前,我想先提出一个编程所面向的抽象层面的概念。

下面先回顾一下计算机语言的初始,在开始没有计算机语言的时候,人们用十六进制来编程,那时候编程的人是面向硬件体系的。

技术是进步的,历史是前进的,跟着发明了汇编语言(也发展出后来的编译原理一课)。汇编的出现,使得硬件体系被抽象成计算机的逻辑结构,编程人员便是面向逻辑结构编程的,这便是最早的编程面向的抽象层面了。

强调指出的是,正是把硬件体系抽象成逻辑结构,使得编程人员的受到的束缚得到解放。同时也造就了一个虚拟的计算机世界。于是人们便是面向逻辑结构这个抽象层面进行编程了。

后来高级语言的产生,也就是在此逻辑结构之上进行再抽象,形成一个更高的虚拟世界,同时也掩藏了更多的实现细节和与规律。(相信现在真正懂得微程序、微操作的人已经没有想象的多了。)

C 语言是如此, C++ 面向对象也是如此,只是 C++ 的抽象层更高,被隐藏的细节更多( 还包括一些高级语言,如 VB 和 JAVA ,其中以 JAVA 尤其突出,因为它是解释语言,而且跨平台!不相信?那么你见过用 JAVA 编的大型射击、动作游戏没有? )。

每一样新的事物的出现都有它的存在的价值,同时也有不利因素。下面先说说 OOP 面向对象的优点。

· OOP 的优点:使人们的编程与实际的世界更加接近,所有的对象被赋予属性和方法,结果编程就更加富有人性化。

· OOP 的也有缺点,就 C++ 而言,由于面向更高的逻辑抽象层,使得 C++ 在实现的时候,不得不做出性能上面的牺牲,有时候甚至是致命的 ( 所有对象的属性都经过内置多重指针的间接引用是其性能损失的主要原因之一;不过,笔者的局限性在于未使用过 VC++ 外的面向对象语言,所以不是十分肯定,哈哈,有人笑出来了… )。

在计算机速度飞速发展的今天,你可能会说,一丁点的性能牺牲没什么大不了。是的,从面向对象的角度,使的编程的结构更加清晰完整,数据更加独立和易于管理,性能的牺牲可以带来这么多的好处,没有理由不做稳赚的生意吧?

不过,在某些对速度要求极高特殊场合,例如你做的是电信的交换系统,每秒钟有超过百万的人同时进行电话交换,如果,每一个数据交换过程都是一个对象,那么总的性能损失将是天文数字!!

或者这个例子不够贴身,再举个例子吧。假如你受聘于一个游戏设计公司,老板希望做出来的游戏可以更多的兼顾到更多的电脑使用者,游戏每秒钟的运行的帧可以更多,子弹和爆炸物可以更多、更华丽。那么,你会发现使用 C++ 会使你的程序变得笨拙,无法满足你的需求,除非你非得要你的游戏运行于奔腾四的机器上 ( 如果不是,而你又坚持用 C++ 的对象编程,那么请减少主角的枪的威力吧 )。

如果你是冥顽不宁的人,你说不相信 OOP 会有性能上的损失,那么,我记得曾看到在 CSDN 上关于 VB 和 VC 执行效率的讨论的文章,讲述的就是使用了 MFC 以后,执行效率甚至低于 VB 开发出来的东西。请各位验证一下:如果使用的是纯粹的 C 语言语法的话,那么一定会比在 VB 编出来的东西要快很多 ( GetTickCount 函数可以查阅 MSDN ,如果想更加精确一些,可以使用 QueryPerformanceCounter 函数 )。

· 也许你会说,本文的作者真笨,懂得 C++ 的人,不可能不懂得 C 的语法吧?那么刚才所说的全部都是废话了!!

请你也清楚一点,懂得 C 的语法,跟熟练使用 C 编写程序完全是两回事。例如在编写游戏的时候,使用 C++ 的人会不停的创建对象,而一个严谨的 C 程序员,他甚至要考虑如果创建的函数太多了,会否造成调用函数时保存现场造成的性能损失,最终决定是否要合并某些函数,或者使用内联函数去做等细节。自然,这样开发出来的东西运行起来也会快的多 ( 在编写程序的时候,只要不是涉及快速开发,我总是拒绝使用 MFC ,虽然我曾经很迷恋 OOP 的开发;不过真的好累人啊 )。

再次强调,写本文的目的并不是提倡不使用面向对象的设计方法,相反,我肯定面向对象所带来的编程方法的革命性的意义。只不过,我在这里指出,如果读者想成为一个真正有价值的程序员,那么请不要忽视 C 的程序设计方法。如果肯面向低的逻辑抽象层面进行程序开发就更好,例如在你的 VC 程序里面直接插入汇编的语句 ( 例如像: _asm mov ax,xx 之类 ),将会提供更大的灵活性,也为你的就业提供更多的机会。

( 写了该文后,我曾害怕会遭到攻击,什么各人有各人的路,把自己的观点强加于人之类的说法,小弟的确实不敢。就好像刘巍写了 — 由C#…给…忠告一文,反而被人说他大言不馋,确实有点冤。我认为,刘先生的文章写的好,是写给有志于振兴中国计算机事业的程序员或初学者的,对我何尝不是一种鼓励,虽然我的水平相差太远…… )

另外,不知大家注意到没有,刘巍先生的文章其实是转贴的,他对各位的漫骂可能根本不知情!

刘巍先生的 “ 由C#风潮想起的-给初学编程者的忠告”的出处在 http://www.zdnet.com.cn/developer 上有;

好了,不说太多题外话!2002年9月25日 .

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有