解释面向对象和面向过程之前,得先解释解释“面向”这个词。其实所谓面向(oriented)就是指按照什么的思路来进行编程(这个“什么”在面向对象和面向过程中便是对象和过程。)。有了“面向” 的概念,便可以大概知道“面向对象”和“面向过程”的概念了。
自然地,面向对象(Object Oriented)便是按照“对象”的思路来编程,面向过程(Procedure Oriented)便是按照“过程”的思路来编程。
那么,什么是“对象”?什么是“过程”?
- 对象:类的实例化便是对象。如果从统计学的角度来进行解释的话,类可以看作是一个统计总体,那么对象就是这个统计总体中的某个个体,统计个体之间存在差异性,类似的,对象之间也是存在着差异的,那么这种差异在编程过程中就体现为属性的不同,即不同的对象之间存在着不同的属性。
例如,某家酒店有两名服务员(服务员A和服务员B),那么服务员A和B共同汇聚起来就形成了一个类(服务员),而服务员A和B就是这个类中的对象,但是呢,服务员A和B又有不同的技能,服务员A会帮客人停车,服务员B会帮客人提行李,这种技能的差异便是刚刚谈到的属性的差异,而服务员A和B之所以可以归属到同一个类,是因为他们都有个共同特征——都是服务员,所以这里若是读者有统计学的基础,借用统计总体和统计个体之间关系与性质,便很好理解类与对象的概念了。 - 过程:所谓过程,可以理解为做事的步骤,将某件事(程序)拆分成若干个步骤(函数),按照步骤顺序进行完成,这些步骤的集合便是过程。
例如,你现在需要把大象放进冰箱,那么你需要经历三步:①打开冰箱;②把大象塞进冰箱;③关上冰箱。这三个步骤便是我们的过程,那么实际编程操作中,步骤①②③便是三个函数,依次调用三个函数实现“把大象放进冰箱”这件事便是所谓的过程思想。
解释完三个核心词——面向、对象、过程。再次回到面向对象和面向过程的概念,便很好理解了。
首先定义某件需要实现的事件A(先不需要知道这件事是什么,只是为了方便理解。)
面向对象:把事件A拆成若干个对象,并且不同对象赋予不同的属性,然后把事件A交由给这若干个对象去完成,这若干个对象会根据自己的不同属性进行分工、相互配合,完成事件A。
面向过程:把完成事件A拆成若干个步骤,依照步骤顺序完成事件A。
Added:若现在定义这个事件A为“煮饭”。煮饭就是把米和水混合在一起放在电饭煲里。
- 面向对象的做法:把煮饭分成3个对象:米、水、电饭煲。
- 面向过程的做法:把煮饭分成5个步骤:打开电饭煲,把米放在电饭煲里,加入适量的水,关上电饭煲,启动电饭煲的煮饭功能。
现在我突发奇想,不想用水来煮饭,我想用牛奶来煮饭。那么面向对象和面向过程分别应该怎么处理?
- 面向对象的做法:把水这个对象抽取出来,然后水换成牛奶。
- 面向过程的做法:现在水和米已经混合一起了,没办法,只好倒了,重新来——打开电饭煲,把米放在电饭煲里,加入适量的牛奶,关上电饭煲,启动电饭煲的煮饭功能。
为什么面向对象可以把水单独抽取出来,而面向过程却不可以抽取?
因为面向对象编程可以通过继承的方法,让牛奶继承水的属性,同时又能够有其他不同于水的属性(牛奶是白色、水是无色,牛奶蛋白质含量更高等等)来满足更改后的事件A’。
















