发信人: hewind (一言难尽|打油湿人), 信区: Npsos
标  题: 我看C、C++、Perl、Object Pascal、And OO
发信站: 哈工大紫丁香 (2003年05月24日09:13:11 星期六), 站内信件

前两天,在网易,大家在争论到底当学什么语言,而且要求版主出来说话,这简直是在赶
鸭子上架!不过,没办法,也只好就自己熟悉的几种语言,糊乱的说几句,说完过后,反
过来看,感觉有些地方太过牵强,遂修改了一下,贴于此处,与大家讨论讨论。
----------------------------------------------------------------------
    先说说C语言,C语言是一种很优秀很高效的语言,几乎无所不能,在十年前,C+汇骗
曾是专业程序员的标志。Unix,Linux,Minix,BSD,Windows~~~ 这些广泛用应的操作系统无
一例外都是它两合作的产物,其中C语言撑起了绝大部份的江山。C语言非常灵活高效,语
法简单清晰,使用起来非常快速。指针在C语言中是最最好用的东西,它使程序员成为了
一个枪手,指哪儿打哪儿!用C语言来编一些与硬件相关度很高的东西,简直爽呆了,谐
如用来写驱动,单片机程序,工控程序等,它清析的流程,会让你觉得整个程序完全在
你自己的掌握之中,不像现在使用的一些什么VB,VC,Delphi, C++ Builder,类度的封
装在让你觉得很方面的同时,自己心理也越来越没底,程序到底是怎样流的~~~。不过C
语言也有它最最大制命的弱点,向来认为是内存管理,但我个认认为这不是C语言的最大
问题,作为程序员,在使用C语言的时候,会对内存管理非常小心,正因为这种小心,一
个有经验的程序员写出来的程序很少有内存访问错误的问题。而C++的类中,引入了内存
管理(注意,不是C++语言引入的自动内存管理,而是说程序员在编写类库的时候可以自
己把内库管理封装起来,从外面看起来,就像C++支持类库管理一样。),但是,由于很
多类库你不能得到它的原代码,所以你并不知道它的内存是怎样管理的,到底管没有管理
,这是很搞笑的一个问题。你认为它管理了,它却没有管理,你认为它没有管理,它却管
理了,这导致了,用C++来编写的程序内存错误经常比用C编写的程序要多得多。在Window
下,常常有程序非法访问内存,Winodows一会儿又蓝屏一会儿又蓝屏,就算是某些商业程
序,甚至是MS自己的程序,有时都会出现这种问题。但在DOS下,却很少有什么程序把DOS
搞死,至少我所接触的程序是这样。
    我认为C语言最大的问题在于对字符串的操作太麻烦了,虽然它定义了很多字符串操
作函数,但是也非常的麻烦,而不支持串型,对于事务处理一类的程序来说,它并不是
一个很好的选择。而且,它的所谓的字符串是用指针字符数组摸似的,对内存的错误操
作十之八九都在这个地方。
    C++是目前的程序语言界的大佬,泰山北斗,无所不能,当然它的无所不能,效率
高能,是建立在对C语言的高度兼容的基础上的,它修改了C语言的很多不方便的地方,
比如,对变量的命名,C语言必须要求在过程开头等等,而且它通过类库提供了对字符
串类型的支持,这使得C++被大量的应用在各种事务处理的程序中,STL类,应当看着
是C++语言不可分割的一部分,STL使C++更标准更易使用了,完善高效的STL类,为C++
的强大应用提供了支持!不会用STL的程序员,很难说会用好C++语言。
    不过,C++语言为了兼容C也弄得自己四不象,复杂的语法,多如牛毛的关键字,
对指针的过分支持,使得类的封装特性几乎就成为了一个规范而不是一种真正的限制,
改改头文件的声明,或者使用返回指向内部私有数据的指针都会使类的私有程序轻而
易举的被访问,这不得不让C++语言陷入一个比较左右不是的地界。这些特性使得C++
语言更不容易被掌握,使用起来更复杂更困难,而且在效率很高的地方,动态连接,
滞后编练,RTTL,等特性不得不使它让位给C语言。在C++推出的时候,很多人,认为
它会将C语言打入历史的像册,但目前看来并未这样,以后也几乎不太可能这样,C++
自身的弱点也使得它不得不于C语言共存。
    C++的应用越来越广了,它的出现,引起了一场被称作面向对象的编程革命
二十年来,也产生了一系列应用于面向对象编程技术的语言的出现,比如说JAVA,以及
现在闹得很火的C#。不过,面向对象技术好像并未达到人们所期待的那种一统天下的程
度。原因可能是多方面的。首先,面向对象技术欠乏很完备的理论支持,一个问题,应
当怎样去抽象,怎样去派生,怎样去设定各种方法属性以及它们之间的关系?那些应当
封装,怎样封装,那些封装在一起,哪些又封装在一起。这都是非常神秘的问题。在这
方面经验占了很大一部份,而理论所占的份量就要小得有限了。用过C++写过类的人,都
可能有这个感受,写个小类还行,要真正写个能把问题解决的很好的多个类,那简直是
一件比要命还难受的事情!光是确定类之间的关系,光是多重继承,虚拟基类,虚拟函
数在类关系,类层次中的联系,都有可能让你崩溃,要设计一个像STL一样出色的类简
直太难了。就连MS都是,你看看它中间的MFC,那里面的复杂以及冗余程度,会让你觉得
恐怖。这方面BORLAND的VCL类稍微要好一点。。。通过类而形成的软件复用,它的作用
在实践中表现出来也好像很有限,一个软件大家都知道要复用,但真正能复用的部分很
少,应为在类最初的设计上,一个类结构不好,你要想复用它复用得很好是非常困难的,
而已经成形了的类,你要想修改一下基类也是非常麻烦的,基类一动,有可能下面的所
有派生类都要动,这样,那里还能谈什么复用?很多时候,你可能觉得于其去修改一个
类,不如自己重写一个。
    C++很强大,太强大了,也正是因为这种强大,使软件设计所需要的要求越来越高,
对类设计的要求就更高了!强大的使我们不一定有能力去驾驭好它。
    JAVA也是一种面向对象的语言,但是它比C语言要简单,而且它支持内存管理,而
且是语言层面的,因此,在这一点上,它比C/C++都要优秀,但也正因为这个优点,它
的应用泛围就受到了一些限制,有得必有失,这是世间的普遍真理,上帝通过它维持
能量守衡。JAVA号称“一次编写,全球运行”,但这现在成了“一次编写,全球调试”
这不得不说是一个很搞笑的事情:P。JAVA,我不熟,就不往下谈了。
    这里我想提一下 perl语言,它是一种脚本语言,在事务处理方面,由于引入了正
则表达式的处理,使得它应用起来非常方便,我曾简单的学习过,感觉你要是用它来完
成一些很实际的出于自身的简单的应用要求,它简直太方便了,当然,它不适用来写一
些商类化的,界面华丽,效率高能的程序。它只是你随身带着的一个谐如科学计算器一
样的工具。
    Pascal 是一种很优秀的语言,语法严谨,Object Pascal对它进行了扩展,让它具
有了面向对象的能力,它在面向对象的能力方面,同JAVA有点类似,比与C++的关系应
当说还要亲一些,Object Pascal虽着Delphi的使用,闻名于世。Pascal由于安全,严
谨,编译指令丰富,功能强大,现在比较有名的竞赛,比如全国NOI,世界IOI信息学竞
赛大多选用此语言,我当年也用过Pascal参加过,它的确优秀,不过,我可能是个比较
随便的人,我不太喜欢太的严谨的语法,而更喜欢C/C++的自由,于是,现在几乎没用了
只是在看一些Delphi程序的时候,用用,快忘光了。
    总得来说,每种语言都有它的实用之处,都有它的长处。总是缠于到底学那一种好,
这样的问题是没什么价值的,就行常常有人在本站的论坛上谈论VC还是Delphi还是BCB一
样。语言就是语言,只是实现你意图的一种工具。要学习语言,要学习编程技巧是一件
很容易的事情,这是短训班的内容。自己看书也很容易明白,然而,我让为大家最好还
是多讨论讨论理论,多学习学习理论上的问理。这才是编程的基础。让你编一个编译器
,就算你掌握了全天下所有的语言,你不知道怎样写还是写不出来。而你如果知道了理
论,你用一个星期学一门语言,然后就可能把它写出来。
    理论不多的人,潜力是有限的,而以后,精力或许会让你没有更多的能力去学习理
论,就像三十岁的人学高数会感觉比二十岁的人学更困难得多一样。没有理论,你就会
处于一种,需要别人告诉你怎么做的地步,而这时,你就沦落为一名按着图纸,按着葫
芦画东西的人了,这或许不能不说是一种凄惨与悲哀~~~

--
    最大的痛苦莫过于,看着原本一个好好的东西,在自己手中慢慢变坏,自己却并不知
道当醒悟过来的时候,只留下满地的碎屑,那是自己无意中作恶的痕迹~~~
    欲打电话怕人烦,不打电话怕人难,打与不打间,今生千万难~~~
    Borland Delphi C++ Builder 社区!http://bdc.cs.hit.edu.cn/                            
~

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 211.93.58.23]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.811毫秒