面向对象与面向过程的区别
面向过程与面向对象的区别
面向过程是直接将解决问题的步骤分析出来,然后用函数把步骤一步一步实现,然后再依次调用就可以了;而面向对象是将构成问题的事物,分解成若干个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在解决问题过程中的行为。
面向过程思想偏向于我们做一件事的流程,首先做什么,其次做什么,最后做什么。
面向对象思想偏向于了解一个人,这个人的性格、特长是怎么样的,有没有遗传到什么能力,有没有家族病史。
打个比方,分别求出长方形、圆形的周长和面积。
面向过程会以,求解数学题的思路去思考:
-
设定长方形的长和宽分别为x和y,圆的半径为r
-
确定长方形、圆形的周长和面积的算法
-
编写出两个计算周长和面积的函数
-
将x、y和r传入相对应的函数,求解长方形、圆形的周长和面积
面向对象会以,描述对象的思路去思考:
-
对规则图形的一般属性和性质进行定义,如周长和面积
-
在规则图形的基础上,创建长方形,描述长方形的属性和性质
-
在规则图形的基础上,创建圆形,描述圆的属性和性质
-
分别创建长方形和圆形的对象,调用它们的周长和面积函数,以求解长方形、圆形的周长和面积
面向过程是从细节出发,将问题细化为先后步骤;
面向对象从宏观出发,重在模拟整个情境中各个要素之间的交互。
面向过程和面向对象的优缺点
下边面向过程和面向对象的概念,想先看概念的小伙伴可以先往下翻。小编在找资料的时候翻到这么一篇文章,写得真的不错:面向对象与面向过程的本质的区别。但是小编想改个比较宜家宜室一点。
面向过程——蛋炒饭
在制作蛋炒饭之前,我们需要知道制作蛋炒饭的步骤:①将饭煮熟②将油倒进锅中预热③饭倒进锅里炒③将鸡蛋打入锅中持续翻炒1~2分钟④出锅。
大家可以看出,制作蛋炒饭是有步骤需要一步步进行的,而且制作出来后,想换成玉米炒饭,就只能把蛋炒饭倒掉,重新做一份玉米炒饭了。
面向对象——快餐盒饭
我们打开快餐盒,可以看到固定的搭配:一菜一肉一饭。这一菜一肉我们可以根据快餐店给出的菜单来选择。
快餐盒饭可以在固定的搭配模型下,自由组合多种套饭,如果想吃玉米不想吃生菜,换就行了。
从这里可以看出,蛋炒饭是蛋和饭均匀混合,你中有我,我中有你,难舍难分,换个术语来说,就是耦合度高。而快餐盒饭胜在菜、肉、饭分离,想换就换,耦合度低。
(耦合度:各模块间相互联系程度的度量)
可维护性表现在3个方面:可理解性、可测试性和可修改性。
在蛋炒饭中,需要了解食材的属性和性质,后续才有保证,需要在食材没被炒熟之前就去了解它们的味道,而且炒出来之后,蛋炒饭就是蛋炒饭,没办法将蛋炒饭,重新换成玉米炒饭。但是蛋炒饭入味均匀,很香很好吃。
而快餐盒饭的单菜单肉,(理想状态下)是可以挨个品尝的,而且我们可以不需要知道这个菜是怎么炒出来的,直接吃就行。虽然可以换菜色,但是没那么入味。
所以面向过程相对于面向对象,可维护性没那么好,但是面向过程在性能方面是优越于面向对象的。
面向过程
概念
面向过程是一种以过程为中心的编程思想,面向过程编程是基于“冯·诺依曼”模型的。在这种模型中,程序与变量一起存储,程序中包含一系列指令,并把这些指令以函数的方式组织起来。
特性
自顶向下、逐步求精、模块化
优点
性能比面向对象高,因为类调用需要实例化,开销比较大,比较消耗资源。
如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,因为在它们看来性能是最重要的因素。
缺点
没有面向对象易维护、易复用、易扩展
(按照面向过程的思想,在解决问题时,各函数之间是为了这个问题服务;而面向对象的思想,则是站在提出问题的主体的角度去解决问题,可将解决这一具体问题的步骤,抽象为解决这一类问题的方法,以后再遇到类似的问题,可以复用解决思路)
面向对象
概念
面向对象是按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的方法。通过面向对象的理念,将计算机软件系统能与现实世界中的系统一一对应。
特性
封装、继承、多态、抽象
(后续会有文章说明这四个特性)
优点
易维护、易复用、易扩展(在解释面向过程的缺点时有对面向对象的优点进行解释)
缺点
性能比面向过程低(同上)