面向对象与面向过程的区别

前言

如果你总是对面向对象和面向过程傻傻分不清,这篇博客尽量会用通俗的方式来讲解。

面向过程与面向对象的区别

面向过程是直接将解决问题的步骤分析出来,然后用函数把步骤一步一步实现,然后再依次调用就可以了;而面向对象是将构成问题的事物,分解成若干个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在解决问题过程中的行为。

 

面向过程思想偏向于我们做一件事的流程,首先做什么,其次做什么,最后做什么。

面向对象思想偏向于了解一个人,这个人的性格、特长是怎么样的,有没有遗传到什么能力,有没有家族病史。

 

打个比方,分别求出长方形、圆形的周长和面积。

面向过程会以,求解数学题的思路去思考:

  1. 设定长方形的长和宽分别为x和y,圆的半径为r

  2. 确定长方形、圆形的周长和面积的算法

  3. 编写出两个计算周长和面积的函数

  4. 将x、y和r传入相对应的函数,求解长方形、圆形的周长和面积

 

面向对象会以,描述对象的思路去思考:

  1. 对规则图形的一般属性和性质进行定义,如周长和面积

  2. 在规则图形的基础上,创建长方形,描述长方形的属性和性质

  3. 在规则图形的基础上,创建圆形,描述圆的属性和性质

  4. 分别创建长方形和圆形的对象,调用它们的周长和面积函数,以求解长方形、圆形的周长和面积

 

面向过程是从细节出发,将问题细化为先后步骤;

面向对象从宏观出发,重在模拟整个情境中各个要素之间的交互。

 

面向过程和面向对象的优缺点

下边面向过程和面向对象的概念,想先看概念的小伙伴可以先往下翻。小编在找资料的时候翻到这么一篇文章,写得真的不错:面向对象与面向过程的本质的区别。但是小编想改个比较宜家宜室一点。

 

面向过程——蛋炒饭

在制作蛋炒饭之前,我们需要知道制作蛋炒饭的步骤:①将饭煮熟②将油倒进锅中预热③饭倒进锅里炒③将鸡蛋打入锅中持续翻炒1~2分钟④出锅。

大家可以看出,制作蛋炒饭是有步骤需要一步步进行的,而且制作出来后,想换成玉米炒饭,就只能把蛋炒饭倒掉,重新做一份玉米炒饭了。

 

面向对象——快餐盒饭

我们打开快餐盒,可以看到固定的搭配:一菜一肉一饭。这一菜一肉我们可以根据快餐店给出的菜单来选择。

快餐盒饭可以在固定的搭配模型下,自由组合多种套饭,如果想吃玉米不想吃生菜,换就行了。

 

从这里可以看出,蛋炒饭是蛋和饭均匀混合,你中有我,我中有你,难舍难分,换个术语来说,就是耦合度高。而快餐盒饭胜在菜、肉、饭分离,想换就换,耦合度低

(耦合度:各模块间相互联系程度的度量)

 

可维护性表现在3个方面:可理解性、可测试性和可修改性

在蛋炒饭中,需要了解食材的属性和性质,后续才有保证,需要在食材没被炒熟之前就去了解它们的味道,而且炒出来之后,蛋炒饭就是蛋炒饭,没办法将蛋炒饭,重新换成玉米炒饭。但是蛋炒饭入味均匀,很香很好吃。

而快餐盒饭的单菜单肉,(理想状态下)是可以挨个品尝的,而且我们可以不需要知道这个菜是怎么炒出来的,直接吃就行。虽然可以换菜色,但是没那么入味。

所以面向过程相对于面向对象,可维护性没那么好,但是面向过程在性能方面是优越于面向对象的。

 

面向过程

概念

面向过程是一种以过程为中心的编程思想,面向过程编程是基于“冯·诺依曼”模型的。在这种模型中,程序与变量一起存储,程序中包含一系列指令,并把这些指令以函数的方式组织起来。

特性

自顶向下、逐步求精、模块化

优点

性能比面向对象高,因为类调用需要实例化,开销比较大,比较消耗资源。

如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,因为在它们看来性能是最重要的因素。

缺点

没有面向对象易维护、易复用、易扩展

(按照面向过程的思想,在解决问题时,各函数之间是为了这个问题服务;而面向对象的思想,则是站在提出问题的主体的角度去解决问题,可将解决这一具体问题的步骤,抽象为解决这一类问题的方法,以后再遇到类似的问题,可以复用解决思路)

面向对象

概念

面向对象是按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的方法。通过面向对象的理念,将计算机软件系统能与现实世界中的系统一一对应。

特性

封装、继承、多态、抽象

(后续会有文章说明这四个特性)

优点

易维护、易复用、易扩展(在解释面向过程的缺点时有对面向对象的优点进行解释)

缺点

性能比面向过程低(同上)

结语

之前写文章的时候,只是带着记录给自己看的目的,直到被一位大佬提醒——你的文章除了你,还有其他人会带着同样的问题来看的!!

现在,重新动笔,从基础开始写。看完文章之后的朋友,如果文章有感觉晦涩不通顺的地方,感谢指出!!

 

引用:

[1]刘晓峥.浅析面向过程与面向对象编程思想之异同[J].科技信息,2011(03):501-502.

[2]面向对象与面向过程的本质的区别

[3]面向对象与面向过程语言的区别

posted @ 2020-03-08 12:43  NYfor2018  阅读(10156)  评论(2编辑  收藏  举报