前言
不久前有人在面试的时候被问及面向对象和面向过程的本质区别是什么?对于这个问题小生
也没有做过多的思考,今天在此做一个总结,探求一些面向对象和面向过程本质的区别在哪里。
简单对比
面向过程就像是一个细心的管家,事无具细的都要考虑到。而面向对象就像是个家用电器,
你只需要知道他的功能,不需要知道它的工作原理。
“面向过程”是一种是事件为中心的编程思想。就是分析出解决问题所需的步骤,然后用函数
把这写步骤实现,并按顺序调用。面向对象是以“对象”为中心的编程思想。
简单的举个例子:汽车发动、汽车到站
这对于“面向过程”来说,是两个事件,汽车启动是一个事件,汽车到站是另一个事件,面向
过程编程的过程中我们关心的是事件,而不是汽车本身。针对上述两个事件,形成两个函数,之
后依次调用。
然而这对于面向对象来说,我们关心的是汽车这类对象,两个事件只是这类对象所具有的行
为。而且对于这两个行为的顺序没有强制要求。
两种思想的对比
面向过程其实最为实际的一种思考方式,因为我们总是一贯一步一步的解决问题。(举个简单
的事情,在初学面向对象的语言例如Java时,我们也总是不经意的面向过程了!)。其实笔者觉得
就算是面向对象思想也是包含有面向过程思想的,面向过程需形成事件、也就是函数,面向对象
需抽象出类,并且也会定义出这类对象的“行为”及方法。但是不论是面向过程的函数,还是面向
对象的方法,两者所完成目的都是一致的。
可以说面向过程是一种基础的方法,它考虑的是实际的实现,一般情况下,面向过程是自顶向
下逐步求精,其最重要的是模块化的思想方法。面向对象的方法主要是把事物给对象化,包括其
属性和行为。这里在程序较小的时候,面向过程就会体现出一种优势,其程序流程十分清楚。
如同上述汽车发动、到站这一过程,面向过程可以很清晰的将这一过程体现出来。而面向对
像仅仅是抽象出一个Bus类,包括发动、到站之两个行为,具体的执行顺序不能体现出来。
面向过程和面向对象的本质理解
面向过程就是分析出解决问题所需的步骤,面向对象则是把构成问题的事物分解成对象,抽象
出对象的目的并不在于完成某个步骤,而是描述其再整个解决问题的步骤中的行为。
面向过程的思维方式是分析综合,面向对象的思维方式是构造。
例如c语言解决问题时,一般是先定义数据结构,然后在构造算法。而是用Java面向对象求解时
则是先抽象出对象,构造一个“封闭”的环境,这个环境中有定义的数据和解决问题的算法。
面向过程的设计更具挑战性,技巧性,面向对象主要在于对象抽象的技术性,一旦完成抽象,
任何人都可以做后面的工作了。
从代码层结构上来说的话,面向对象和面向过程的主要区别就是数据是单独存数还是与操作存储
在一起。面向对象提供了数据的封装后,是的对某一操作而言,数据的访问变得可靠了。
面向过程就是将coding当做一件事,一步一步完成,面向对象就是将coding当做一件事物,需要
做什么的时候由事物(对象)本身的行为去完成。
总的来说:
面向对象是将事物高度抽象化。
面向过程是一种自顶向下的编程
面向对象必须先建立抽象模型,之后直接使用模型就行了。