在谈论面向对象和面向过程区别之前,我们需要了解一下什么是面向对象和面向过程是什么?总的来说,面向对象和面向过程都只是一种编程思想,对问题不同角度得去分析和解决。
1、思想上的区别
面向过程:简单的来说,面向过程就是将事物分为不同的步骤,根据这些步骤去完成编程。我们可以以五子棋来理解面向过程思想。在面向对象的思路中就是先分析五子棋需要的步骤:
(1) 绘制棋盘
(2) 开始游戏
(3) 黑子下
(4) 绘制黑色棋子
(5) 判断输赢
(6) 白子下
(7) 绘制白色棋子
(8) 判断输赢
(9) 返回步骤(3)
然后,在开发过程中,将以上步骤一步一步地实现
面向对象:而面向对象的设计思路则是将问题分为不同的部分对象,并给对象赋予属性和行为。同样拿五子棋为例,在实现时,需要去分析需要那些对象。
(1) 棋子对象(负责黑白双方落子等行为,仅需要给他们一个颜色属性进行区分即可)
(2) 棋盘对象(负责绘制棋盘,包括棋子的位置绘制)
(3) 规则对象(负责对五子棋进行输赢判断,先后手顺序判断等)
从这个例子中,我们可以发现,面向过程在实现中比较抽象,考虑的方面比较多。而面向对象,用对象直接出发,更加趋向于我们人类的思想。
2、维护上的区别
不但在实现上,包括后续的功能维护上,也有很多不同。依旧以上述的五子棋为例。我们如果要在五子棋的游戏中添加一个新的操作,例如悔棋。那么他们双方需要如何去实现呢。
面向过程:如果是面向过程的话,我们不但需要在每个人操作时判断是否有悔棋操作,还可能对前期一系列的步骤进行修改,数据的存储。对棋子的落子位置进行存放等等问题,改动可以说是十分巨大的。
面向对象:而面向对象就不需要有那么大的改动,因为在面向过程的思路中,整个五子棋游戏主要分为:棋子、棋盘、规则三部分组成。进一步分析如果我们加了悔棋,变化在哪里?规则是不会变得、棋子也不会变。唯一会变得就是棋子在棋盘上的布局。我们只需要在棋盘系统中增加一个棋谱回退的功能即可。局部的变化就可实现。
3、从性能上的区别
这个就是比较明显得事情,首先,面向对象在实现中需要类得组成,而类得调用需要实例化,这样开销就比较大,会消耗很多得资源,相对于面向过程在性能上就会低一些。所以在主要考虑性能时,一般会采用面向过程而不是面向对象。
简单的总结一下:
面向过程:性能方面比较高,但在维护、复用、扩展上比较差
面向对象:由于面向对象有三大特性:封装、继承、多态。也就带来了三个特点:易维护、易复用、易扩展。但这也同时消耗了性能,所以性能方面比较低。
最后提个小问题:面向过程的性能一定比面向对象高吗?