面向过程重在怎么干,怎么按步骤把任务做完;而面向对象重在让谁去干,不关注完成任务的过程与方法。
两者可通过企业发展来类比:
早期的编程任务较简单,所需完成的任务是一些计算方面的工作,这时以面向过程的方式来一步步编写程序是可行的。面向过程适合于这种简单的任务。 | 企业初期,公司较小,业务也较少,几个人便可流程一步步完成任务 。 |
现在编程变得复杂,面向更大的软件,这时所处理的业务大了,数据量也更多了,如果仍以面向过程的方式来组织代码 ,将变得很困难,一个地方的修改很容易影响全局。这时采用面向对象的方式来组织相关的数据和方法,把它们放到一个相关的类中进行封装,就方便许多,由于面向对象的封装性,类中代码的修改对外界影响将会很小。 | 企业发展起来后,业务变得繁多复杂,这时几个人来完成所有工作是不现实的,这时便设立各种部门,老板把要做的事务交给相应的部门即可,无需关注事务如何实现,只关注结果即可。 |
代码模拟:
public class Boss{ public 结果 call1 人事部(待执行任务){ 人事部类对象.处理方法(待执行任务); //通知人事部去做指定任务 } public 结果 call2 财政部(待执行任务){ 财政部类对象.处理方法(待执行任务); } public 结果 call3 行政部(待执行任务){ 行政部类对象.处理方法(待执行任务); } private 人事部类对象; private 财政部类对象; private 行政部类对象; }
另外,面向对象和面向过程关系是很密切的,面向对象编程中包含面向过程,在把复杂问题化为简单方法时,方法的编写就是通过面向过程思想来实现的。
一个经典的比喻:面向对象是盖浇饭、面向过程是蛋炒饭。盖浇饭的好处就是“菜”“饭”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是“可维护性”比较好,“饭” 和“菜”的耦合度比较低。
总结
1.对象说白了也是一种数据结构(对数据的管理模式),将数据和数据的行为放到了一起。
2.在内存上,对象就是一个内存块,存放了相关的数据集合。
3.对象的本质就一种数据的组织方式。