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

写在前面

看的网上教程出的简答题,简单记录一下。参考资料如下:

基本概念

1.面向过程 procedure oriented programming POP

以事件为中心的编程思想。就是分析出解决问题所需的各个步骤,然后用函数把这些步骤按顺序实现,并按顺序调用。

特性:模块化 流程化

2.面向对象 object oriented programming OOP

把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

特性:抽象 封装 继承 多态

实例参考

以五子棋游戏为例。

面向过程的设计思路就是首先分析问题的步骤:

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

把上面每个步骤用不同的方法来实现。

面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为:

  1. 黑白双方,这两方的行为是一模一样的,
  2. 棋盘系统,负责绘制画面,
  3. 规则系统,负责判定诸如犯规、输赢等。

第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

如果要加一个悔棋功能,面向过程则需要改动很多地方,黑子撤回棋,棋盘变化,然后载绘制,再判断,可能很多要变化;随着功能的越来越多,系统无法应付功能需求的规则的复杂而膨胀,最终导致奔溃;但是面向对象只需要得到悔棋命令后,绘制棋盘系统将棋盘重新绘制,调用规则系统判定即可,减少了大的改动;保证了面向对象程序的可扩展性;

所以从上可以看出,面向对象是以功能来划分问题,而不是步骤。面向对象会从宏观的角度思考要解决的问题,将问题抽象成一个系统,进而分析系统中相互作用的各个对象,将问题的解决看做的系统中的对象相互作用的结果。而面向过程则更加“直截了当”,聚焦于某一个特殊问题的解决,用编程语言实现解决问题的方法步骤。

简言之,面向过程,效率更高;面向对象,通用更好。

对比的优缺点

1.面向过程

优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源,比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。

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

2.面向对象

优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护

缺点:性能比面向过程低

具体而言的区别

1、出发点不同

面向对象方法是用符合常规思维的方式来处理客观世界的问题,强调把问题域的要领直接映射到对象之间的接口上。

面向过程方法则强调的则是过程的抽象化与模块化,它是以过程为中心构造或处理客观世界问题的。

2、层次逻辑关系不同

面向过程的方法则是用计算机逻辑来模拟客观世界中的物理存在的,以对象的集合类作为处理问题的单位,尽可能地使计算机世界向客观世界靠拢,以使问题的处理更清晰直接。

面向对象方法是用类的层次结构来体现类之间的继承与发展。面向过程方法处理问题的基本单位是能清晰准确地表达过程的模块,用模块的层次结构概括模块或模块间的关系与功能,把客观世界的问题抽象成计算机可以处理的过程。

3、数据处理方式与控制程序方式不同

面向过程方法是直接通过程序来处理数据,处理完毕后即可显示处理的结果,在控制方式上是按照设计调用或返回程序,不能自由导航,各模块之间存在着控制与被控制,调动与被调用的关系。

面向对象方法将数据与对应的代码封装成一个整体,原则上其他对象不能直接修改其数据,即对象的修改只能由自身的成员函数完成,控制程序方式上是通过“事件驱动”来激活和运行程序。

4、分析设计与编码转换方式不同

面向过程方法强调分析、设计及编码之间按规则进行转换贯穿于软件生命周期的分析、设计及编码中,实现的是一种有缝的连接。

面向对象方法贯穿于软件生命周期的分析,设计及编码中,是一种平滑过程,从分析到设计再到编码是采用一致性的模型表示,即实现的是一种无缝连接。

二者不是完全对立

面向过程与面向对象不是完全对立的,不是在编程的时候必须要选择某一种思想作为唯一的。实际问题的解决中,往往是要首先对问题进行分析,建立模型,构建系统,设计对象,具体进行类的设计,这都是面向对象的思想的体现。而具体到类的设计过程中,具体到类的某一种方法的实现,还是需要面向过程的思想来参考的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值