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

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

面向过程

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值