9 Java 面向对象编程与面向过程编程的区别是什么?

约 915 个字 预计阅读时间 3 分钟

面向对象编程(Object Oriented Programming,OOP)是一种编程范式或者说编程风格。把类或对象作为基本单元来组织代码,并且运用提炼出的:封装、继承和多态来作为代码设计指导。

面向过程编程是以过程作为基本单元来组织代码的,过程其实就是动作,对应到代码中来就是函数,面向过程中函数和数据是分离的,数据其实就是成员变量。

面向过程其实就是一条道的思路,因为起初就是按计算机的思路来编写程序。

我就拿用咖啡机煮咖啡为例,按照面向过程的流程是:

  1. 执行加咖啡豆方法
  2. 执行加水方法
  3. 执行煮咖啡方法
  4. 执行喝咖啡方法

很简单直观的操作,你可能没什么感觉,我再按面向对象思想来分析下这个流程。

在执行煮咖啡操作前要抽象出:人和咖啡机(分类),然后开始执行:

  1. 人.加咖啡豆
  2. 人.加水
  3. 咖啡机.煮
  4. 人.喝咖啡

是不是有点感觉了?

面向过程,从名字可以得知重点是过程,而面向对象的重点是对象。

从这个例子可以看出两者的不同:面向过程是很直接的思维,一步步的执行,一条道走到底。

而面向对象是先抽象,把事物分类得到不同的类,划分每个类的职责,暴露出每个类所能执行的动作,然后按逻辑执行时调用每个类的方法即可,不关心内部的逻辑。

从例子可以看出面向对象编程执行的步骤没有变少,整体执行流程还是一样的,都是先加咖啡豆、加水、煮咖啡、喝,这个逻辑没有变。

无非就是划分了类,把每一步骤具体的实现封装了起来,散布在不同的类中。

对我们程序员来说是最最直接的感受:变的其实就是代码的分布,煮咖啡的代码实现被封装在咖啡机内部,喝咖啡的代码实现被封装在人内部,而不是在一个方法中写出来。

代码的分布确实是最直观的,但是变得不仅只是分布,而是思想上的变化。

就是上面提到的计算机思维到人类思维的变化。

我认为这个变化是因为软件的发展,业务越来越复杂。

人们用面向过程语言编写复杂的软件时,需要按照不同的功能把一些数据和函数放到不同的文件中,渐渐地人们就发现这不就是先分类吗?

并且好像业务分析下来都能和现实世界的东西对应上?

于是人们慢慢地总结、提炼就演变成了面向对象,再根据面向对象的特性提炼出关键点:封装、继承和多态。

而这个面向对象思想就类似我们人类面对复杂场景时候的分析思维:归类、汇总。

所以面向对象编程就成为了现在主流的编程风格,因为符合人类的思考方式。

面向过程编程和面向对象编程从思想上的变化是:从计算机思维转变成了人类的思维来编写编码。

而面向对象编程的类中数据和动作是在一起的,这也是两者的一个显著的区别。