zero《Head First Java》在小白眼里是我学计算机以来看的第一本书,也是我看过最有趣的编程语言教程。不同于其他的书,这本书,或者说整个《Head First》系列,最大的不同就是完全不像教程那样写,而是像小说一样……让读者在愉快的氛围中,不经意间就能理解很多概念课堂上的老师即使“抽筋鸭”也填不上来。这篇文章在小白眼里是面向对象的。作为一所名不见经传大学的本科生,我对大学的计算机学习有很多的了解。对于非计算机专业的学生,??我们唯一的计算机课程是《VC程序设计》。表面上是C++,实际上是C,因为它不涉及任何类和对象的知识,完全是面向过程的。学习的内容只是输入输出,数据类型,简单的循环和判断……至于学习的效果,大部分同学记得最深最深:#includeusingnamespacestd;intmain(){return0;}那写什么。。。不知道。。。就是这个水平!因此,我和很多大学生一样,在学习Java之前并不知道什么是面向对象,脑子里想的也是面向过程。1、面向过程首先,什么是面向过程?“过程”,一想到这两个词,我脑子里的第一反应就是加工厂、生产线,也可以理解为数学中的函数。“你需要如何制作一杯咖啡?”需要水和咖啡粉作为原料,先将水加热,然后倒入咖啡粉中。那么我们就可以画出这样一张图。“进程”是一个管道。在为流程设计程序的时候,我们只需要考虑从输入到输出是如何实现的,经过了哪些步骤,然后把这个实现一个一个拆分成具体的步骤。程序运行时,可以按顺序执行。所以面向过程可以抽象成下图:在面向过程中,所有的数据都存储在变量中,所有的步骤都是通过函数来??实现的。面向流程的时候,满脑子想的都是流程,就是工厂里的每一个流程。二、面向对象登场那么面向对象有什么区别呢?面向对象的思想可能更贴近现实生活。当我自己试着去理解这个物体时,出现在我脑海中的不再是一个加工厂,而是一个充满活力的公园。公园里有很多人和各种小动物,孩子们在玩耍,蜜蜂在花丛中采蜜,旁边的石凳上坐着一位作家,正准备打开电脑和写稿子……在这幅画里,一个孩子,一只蜜蜂,一朵花,一个作家,还有你手里的电脑,一切,都是一个对象。而这些对象之间,又是通过某种方式相互影响的。所以,面向对象和面向过程最大的区别就是面向对象不再关注完成某件事情所需要的步骤,而是更加关注事物之间的联系。对象包含两个重要的内容:一个是对象的属性,一个是对象的方法。以刚才提到的作家手中的笔记本为例:笔记本必须有一个状态——开或关,那么它的状态就是一个属性;笔记本还有内存大小、硬盘容量、CPU型号等等,这些也是这款笔记本的属性。简单的说:对象的“属性”就是面向过程中提到的“变量”。什么是“方法”?在现实生活中,一个方法其实就是实现一个功能。比如一个notebook的boot方法,就是把这个notebook的状态从closed变成open,那么boot就是这个notebook的一个方法;notebook也可以打开文档,显示文档的内容,然后“打印文档信息”是这个notebook的另一个方法,这个方法有一个输出值,就是文档信息的字符串。那么如何解释对象的“方法”呢?——可以理解为面向过程中提到的“函数”。但这并不严谨,或者说不完全正确,因为变量客观上只是用来存储数据的,而属性也可以存储数据,但它是对象的一个??特性。变量可以没有对象而存在,但属性不能。如果没有对象,属性就失去了意义(如果没有计算机这个实体,你能想象“启动”是一种什么样的状态吗?)。同理,函数代表一个数据处理过程,方法代表这个对象与其他对象通信的方式,没有对象就不能存在方法(如果一个没见过电脑的人关掉电脑,那对他来说会很尴尬!)。3.类我们继续以笔记本电脑为例。小强、小达和小轩都有自己的笔记本电脑,而且这些电脑都有共同的特点,可以说属于同一个“班”。什么是“类”?人生的课堂是什么?用通俗的语言来说,就是一组具有共同特征的事物。所以类是一组具有共同属性和方法的对象的模板、蓝图。如果几个对象属于同一个类,则该类包含这些对象共有的属性和方法。而且,可以从这个类创建新的对象,新创建的对象也具有这个类的特性。可能我们刚开始接触类和对象的时候,并没有感觉到它的用处。我们继续说,如果需要用变量来表示小强、小达、小轩的电脑信息,应该怎么做呢?假设每台笔记本有3个信息:磁盘容量、内存大小、开机/关机状态。如果在面向过程的思维中,是这样的://小强的笔记本intXiaoQiang_Disk;intXiaoQiang_Memory;boolXiaoQiang_Status;//小大的笔记本intXiaoDa_Disk;intXiaoDa_Memory;boolXiaoDa_Status;//小轩的笔记本intXiaoXuan_Disk;intXiaoXuan_Memory;boolXiaoXurn_Status;需要定义3*3=9个变量。如果是面向对象呢?//定义一个笔记本类classlaptop{intdisk;内部记忆;boolstatus;}//基于该类创建三个对象laptopXiaoQiang=newlaptop();laptopXiaoDa=newlaptop();laptopXiaoXuan=newlaptop();需要定义3+3=6个变量。或许无所谓,不就是少写了几个变量吗?但试想一下,如果需要表示的笔记本数量增加到10000台会怎样?在面向过程的世界里,你需要定义10000*3=30000个变量;而使用面向对象的思想,只需要定义10000+3=10003个变量。准确的说,如果你通过某个类创建了一个新的对象,这个对象会复制这个类的所有非静态属性和非静态方法。属性只创建一次。因此,面向对象有一个最简单的好处,就是将需要通过创建指数级变量来表达的信息改为只需要创建线性级变量。四、继承面向对象的另一个好处就是继承。“继承”二字说的很形象,让人瞬间联想到父母在生活中将自己的财产交给子女。孩子接受财产的行为就是继承。传承也可以说是“下一代”对“上一代”的继承。手里拿着东西。究竟什么是“获得”?-属性和方法。被继承的类称为父类(给予东西的类),进行继承的类称为子类(索取东西的类)。继承的动作可以理解为“以类为模板,创建新类”。还是说计算机,计算机有很多种:PC、笔记本、服务器……它们都是具有很多共同特征的计算机,比如磁盘、内存、CPU……所以你可以创建一个“计算机”类来代表所有计算机模板。但是,它们有自己的特点。所有的笔记本都有电池,所有的服务器都有ECC内存,所有的PC都有显示器……因此,可以根据三者的特点建立这三个类,并且都继承自“Computer”类,让它们都保留共同的属性又各有特点。第五,多态和接口更厉害——就是多态和接口……由于目前能力有限,下次再写吧。6.小结在我新手看来,面向对象比面向过程更贴近现实生活,因为一个对象可以是生活中真实存在的对象,所以只需要抽象出这些对象的共同属性,就是一个类.面向对象的思想更容易理解并且有很多优点(继承、接口、多态……)。去年初学计算机的我,被“面向过程”和“面向对象”这两个词搞糊涂了。发帖,发现他们说的不是很清楚。。。直到现在学了PHP和Java,真正做过项目,才对这两个词有了更深的理解。以上概念如有错误或不妥之处,敬请指出。