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

  • Post author:
  • Post category:其他




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



面向过程



1.概念:

以时间为中心,把解决问题的步骤分析出来,然后按顺序调用函数一步一步实现

面向对象方法的基础实现中也包含面向过程的思想

在这里插入图片描述



2.特性

模块化

流程化



3.优势

①性能相较面向对象较高

类调用的时候需要实例化,因此开销大,比较消耗资源(eg:片机、嵌入式开发、Linux/Unix等一般采用面向过程开发)

性能是需要关注的主要因素

②流程化的编程,具体步骤和每个步骤系要完成的任务明确清晰,在开发之前基本考虑了实现方式和最终结果,便于节点分析

③效率高,强调代码的短小精悍,善于结合数据结构来开发高效率的程序。



4.劣势

需要深入的思考,耗费精力,代码重用性低,后期不易维护、不易扩展



面向对象



1.概念

当问题规模变得更大,面向过程的思想显然不够用。世界上的人和事物都可以看做一个对象,都有属于自己的的属性和特定行为,对象与对象之间通过方法来交互。简单来说就是靠

属性+方法

实现。

面向对象是一种以“对象”为中心的编程思想,把要解决的问题分解成各个对象,各个对象之间交互,完成事件,解决问题。

编程建立对象,描叙某个对象在整个解决问题的步骤中的属性和行为,而不是为了完成一个步骤。

在这里插入图片描述



2.特性

抽象

封装

继承

多态



3.优势:

①结构清晰,整个程序设计是结构化和模块化的,更符合人类的思维方式。

②易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护(系统低耦合的特点有利于减少程序的后期维护工作量)。



4.劣势:

①性能比面向过程低,由于面向更高的逻辑抽象层,使得面向对象在实现的时候,不得不做出性能上面的牺牲,计算时间和空间存储大小都开销很大。

②开销大,当要修改对象内部时,

对象的属性不允许外部直接存取

,所以要增加许多没有其他意义、只负责读或写的行为。这会为编程工作增加负担,增加运行开销,并且使

程序显得臃肿



两者对比



最本质的区别

两者的结合方式不同

用两个例子来说明:

①蛋炒饭和盖浇饭问题 主要表现在

粒度



蛋炒饭的粒度只能是饭粒,即使添加再多东西也只是量不同而行相似的同种

粒子


而盖浇饭的粒度是

分结构和层次

的,比如 饭粒 菜片 一碗饭 一碗菜 饭菜合在一起又是一个粒度

②下五子棋问题



面向过程

设计,整个思路是分析这个问题的解决步骤:

(1)开始游戏(2)黑子先走(3)绘制画面(4)判断输赢(5)轮到白子(6)绘制画面(7)判断输赢(8)返回步骤(2) (9)输出最后结果。

按照编程语言,依次调用函数实现:

下五子棋{

开始游戏();

黑子先走();

绘制画面();

判断输赢();

轮到白子();

绘制画面();

判断输赢();

返回到 黑子先走();

输出最后结果;

}

就是一个

流程

,

循环

的过程直到结束 整个程序是一个平面结构平面



面向对象

设计下五子棋,我们就要先划分出整个问题解决过程中涉及到的对象(三个:黑白棋子、棋盘系统、五子棋规则系统):

(1)黑白棋子:用于下子这一行为

(2)棋盘系统:用于绘制下棋的画面

(3)五子棋规则系统:用于判断输赢、双方走棋是否合乎规范

然后,设计各类对象它们的

各个职能和属性

,以及对象间如何交互解决问题:

(1)对象①——黑白棋子:接受用户输入,并告知对象②,绘制图像

(2)对象②——棋盘系统:接受对象①指令,绘制显示画面,并按照对象③设定的规则判断

上述是一个职能划分明确,层次分明** 复杂的系统结构。



另外:

如果在五子棋设计中,增加其他功能,例如:悔棋


面向过程

:从输入到显示再到最后判断的整个步骤都要改动,甚至函数的调用顺序也要改动


面向对象

:只需在棋盘系统中增加一个回溯的功能,黑白双方和规则系统的属性和行为都不需改动。

由此得出:面向对象程序设计中代码间的相关性低(低耦合特性),使得代码很容易被复用和扩展,同时也说明了面向过程的代码重用性低、扩展能力差。

②蛋炒饭和盖浇饭的例子:

粒度问题




结果状态

来说:


面向过程

只有

过程(也就是函数)

组合起来也只是一堆函数

蛋炒饭只有粒(蛋粒 肉里 饭粒 蛋饭粒 总之 他只有粒子一种形态) 组合起来也只是一堆粒子 并

不能体现出之间的联系

只有饭和蛋融合在一起密不可分的联系 因为它的结合方式是炒


面向对象

有过程 也有 对象 结合起来

是一个系统 **

盖浇饭 是由饭粒 菜 饭团 菜团 还有终极形态盖浇饭 结合起来是一种复杂结构 其烹饪方式 不仅有炒( 炒是一个融合的过程 解释为

封装**) 还有煮(

组合

) 蒸(

聚合

)

从结合方式(系统复杂性 耦合性)上说:

原子烹饪模块: 就是做东西的过程 无论做什么 其过程都类似 点火 放材料 取结果

烹饪过程: 将各种材料(可能是原材料也可能是上次烹饪的成果)再放在一起建立关系 结合在一起

蛋炒饭永远是对整体进行炒(原子烹饪模块)的操作 即使炒的东西不同 但最后依旧只是炒成一堆散粒子的堆砌物(这是炒的特性)

盖浇饭在每一个小组成也是原子烹饪模块 但是它有几种原子烹饪模块 与蛋炒饭的不同是 它不仅有炒 还有煮( 蒸 炸 从最基础的种类上(结合方式)不同 ,由不同的结合方式结合成各种不同的对象

其中蒸的模式里 就是一种弱关联,两种材料(上一次炒和煮的成果)可以拆分 这也就造成了 盖浇饭的复用性

其中 耦合性就代表着 可维护性(运行后) 复用性(编码阶段) 易扩展(持续开发) 等等等等

这就是面向过程与面向对象

最本质的区别: 结合方式的不同


种类 和 数量

世间若只有数 便只能产生有1 2 3 4 12 13 14 即使复制出再多数字相叠加 也没有什么不同

世间有数和文字 还有 那么不仅会有1 2 3 4 而且还会有 1拍1 一只小猫坐飞机


link

.https://zhuanlan.zhihu.com/p/28427324



版权声明:本文为qq_36083818原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。