Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4014785
  • 博文数量: 272
  • 博客积分: 7846
  • 博客等级: 少将
  • 技术积分: 6476
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-25 16:27
文章分类

全部博文(272)

分类: Python/Ruby

2011-04-24 18:13:04

一、前言    

    有很多人做了N久的程序员,还在使用面向对象的方式做程序。

    即便他们使用的是C++、Java、Python、或Ruby等,使用面向对象语言未必就一定是面向对象编程;反之亦然,使用面向过程的语言如C语言,也未必不能完成面向对象的程序。Linux的内核代码就是用C写就的(当然还有很少量的Asamble),但里面融入了很多面向对象的思想,严格的说Linux内核越来越“对象化”了。
 
    Linus曾经不止一次的在公开场合宣称,打死也不用C++,而且一直认为面向对象的C++和Java冗繁而效率低下。但是在IT业界,如果是写代码的,不会面向对象就只能是程序员,面向对象后慢慢就可以开始干软件工程师了。可见,市场对面向对象非常认可,它是完成团队化作业的必备武器。如果您也是IT超级天才,一个人就可以干出一个大软件,那么您就不必非得使用面向对象了(如果项目大,我仍然建议使用OO)。

    
二、感受
    
    面向对象感觉是个好东西,也很想学,也找了很多教程来啃,结果非但没学成,而且感觉越来越乱,甚至开始觉得自己是不是一上30岁,接受能力骤减,不再适合干IT了。郁闷随心而来,换一门面向对象语言再学,还是那样。

    面向对象一般程序员而言,就是恶魔,但这个恶魔拥有强大的能量,掌握它、驯服它都不容易。和面向过程的C语言不同,面向对象的学习曲线非常陡,极不容易爬上这个坡。面对着的这座巅峰,我们如何是好?

三、自我测试

    想学面向对象,或者说想学到面向对象的精髓,达到灵活运用的程度,该怎么办呢?

    学习面向对象,不能一开始就一头扎到语法中去,因为此时你还不会游泳,这样下水一定会被淹死。当然你可以选择留在岸上或者坐船远航。留在岸上的不论是在勇气、毅力、决心或具体实施力上注定就是一个程序员了(不是在说你,请勿对号入座)。

    经我分析,只有这些不怕晕船的人可以学好面向对象:
    1、自己想独立完成一个项目,项目或大或小都可以;
    2、已经掌握传统的顺序、选择、循环常规武器;
    3、在现实世界或精神世界或网络世界成为过组织者或管理者;
    4、独立动手能力强,看到“while/for”就有冲动想试试“1+2+...+100”是不是5050诸如此类的“拓展验证派”。

    其中,最为关键的是“角色”和“拓展验证”这两个因素。

四、跋

    我是一名大学计算机教师,通过通俗的语言说明复杂的事情是我的职责,看到周身的同事和从事IT的同学们,我觉得有必要好好研究一下面向对象,并把最简单、最直接(绝对不会是最轻松,因为刘凯说过:“看会不是会”)的方法告诉大家。

    现在就开始吧。

    面向过程和面向对象,都是思想工具而非开发工具,正如前文所述不论你用支持面向对象的语言如Java可能一直在做的还是面向过程的事。第一个结论:请大家必须记住:面向过程和面向对象与具体的语言无关,只是在具体实现想法的时候必须用某种编程语言如PHP来表达而已

    简单地说,打个比方:我有个想法“肚子饿了,要吃饭”,说中文也行(Java)说英文也行(PHP)说法语也行(C++)。不管你用什么语言,其实都能表达出想吃饭这个想法,这个想法就是编程思想,面向对象就是这个层次的。当然,全面的说,不仅是这个层次的,面向对象的核心是采用面向对象的思想处理问题,把思想用语言表达出来,就得使用工具,从抽象到具体:UML做系统分析和描述,是高层的,再用Java语言具体实现代码是最低层的实现罗。

五、Start now on...

    是不是面向对象是万能的呢?首先,写一个hello,world程序。使用面向对象得建个类,在使用new或::的方式输入结果,还不如直接print出来多愉快。所以,小东西面向对象不是必须的。如果让大家编写一个工资管理系统,使用面向对象就合适了,因为代码有许多重用的地方,而且这次开发了工资,也许领导一看高兴,接着让你开发人事管理系统呢,都采用面向对象方式,会省许多事。

    所以,第二个结论:项目越大,越应该使用面向对象方式。项目越小,或者连项目也不是,直接使用一个函数了事算了。

    下一章,我将和大家共同分析一个计算器程序的PHP实现,希望各位能从中体会到面向对象和面向过程的根本差异所在。
阅读(1852) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~