面向对象与面向过程的理解

       由于之前学过面向过程的c语言,因此在学习java的时候,免不了在心里将两者对比一番,比如,经常想到一个包里面的其他的class就像c里的子函数一般,被主函数调用。但是java毕竟是面向对象的一门编程语言,而之前也一直不明白面向对象与面向过程的区别。虽然老师举过一个例子:将大象放到冰箱。用面向过程的方法就是:打开冰箱,放入大象,关闭冰箱。用面向对象的方法是:找一个对象,可以实现以上将大象放入冰箱的功能。

    当然,老师讲完这个例子,我还是没有很明白,觉得只不过是将三个函数功能集成为一个函数了而已,到时候直接调用这个函数就ok,在c里也可以这么干啊,那java有什么优势呢?直到看了head first java这本书,它里面举得例子是在太形象,立刻明白了。

    书中,以编程实现三个几何图形的旋转与播放音乐功能为背景,两个编程人员C与J分别使用c和java进行开发工作。一开始,C用c语言编了两个函数rotate和play, 而J用java编了三个对象class,对象内的内容也是rotate与play。现在开来,貌似用c还更省事一点,直接函数调用就ok;但且慢,既然是开发,当然客户会有临时更改有求的可能,现在客户说第三个图形播放的音乐类型是与其他图形不同的,那C就用c语言这么干,在play里面加上个判断语句好了,最后再测试一下写的程序;而J只需要在第三个图形这个class里修改就好了,并且前两个对象没有修改不需要再次测试。如果这还不够,客户又提要求了,再加个不规则图形吧,而且旋转中心也变变,前三个都用中心点作为旋转点,第四个用左上角的点作为旋转点吧,那C只好又一次在rotate里加上判断语句,再次对程序进行测试,而J只新写一个class,里面的rotate是以左上角的点作为旋转点的。

    到这里,面向对象与面向过程的区别就出来了。如果客户不断的提要求,就要不断修改并测试,这时,使用java明显的可以更易修改与测试,因此,java才会受到开发人员的欢迎。本质上,面向对象与面向过程并没有优劣之分,只是编程的思想不同,角度不同而已,在具体的函数功能的实现上都是一样的。面向过程如c语言,是将许多对象的所有功能都写成单独的函数,在使用时调用;面向对象是把某一对象的所有功能写在这一对象class下,如果另一对象有相同的功能,则此功能会在另一对象class里再写一遍,习惯了c语言的人会觉得啰嗦费事。

    因此,抽象的理解下来,这两种思维方式无非是:有A、B两个集合对应,现在是固定A集合,将B集合里的每条内容对应到A集合里的相应位置,还是固定B集合,将A集合里的每条内容对应到B集合里的相应位置。那我们把这个抽象的思想在java和c的对比中具体化:A集合是功能 B集合是对象。我们知道A集合与B集合是对应的,并且A集合的不同功能可能对应B集合的同一个对象,如冰箱这一个对象会有开门与关门不同的功能;另一方面,A集合的同一功能可能对应B集合的不同对象,即不同对象都会有这种功能,如冰箱与汽车都会用到开门这一功能。现在面向过程如c语言就是将A集合功能固定,先编写所用到的所有功能,在主函数中调用就是了;而面向对象则是将B集合对象固定,写出所出现的所有对象,将功能放入对象。

    由上可看出,面向过程如c语言,写起来很方便简洁,直接调用函数,但是需要修改的时候花费时间较长,在客户不断提要求修改情况下,很可能导致程序语言结构臃肿,如上例中不断在rotate和play中加判断语句,测试起来也会花费大量时间,因此它只适合书写小程序。而面向对象如java,在每个对象下都要写这个对象的功能,在功能重复的时候,会显得啰嗦,不如直接函数调用来的简洁,但在开发中,应对随时可能出现的变化,有极强的适应能力,因此,这种面向对象的语言,只有在大型程序的编写与需求经常变化的环境下才能凸显出其优势。故第一段中那个大象放到冰箱的例子并不能让人理解这两种方式的不同也就不奇怪了(没有变化,程序功能简单,体现不出面向对象)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值