0%

Differences-OOP和POP的区别?

1 概述

面向过程编程(POP)和面向对象编程(OOP)都是编程方法,它们使用高级语言进行编程。

示例:对于开车,加速,减速,刹车几个步骤.

  • 面向过程编程:首先需要有个车,然后这4件事需要分别写4个函数,分别是开车,加速,减速,刹车.如果要使用的话,则分别调用这四个函数.
  • 面向对象编程:需要关心的应该是车这个类,而不是开车,加速,减速和刹车这四个过程.这四个过程只是这个类的一部分,只是其中的一种行为,对于行为的顺序没有强制要求.

2 面向过程编程(OOP)

OOP是一种常规的编程方式.面向过程编程主要重点在于按顺序完成任务.通过流程图组织程序的控制流.若程序是扩展程序,则使用函数对一些小单元进行结构化,他们共享全局数据.

(面向过程时具体的,流程化的)

POP特征:

在设计程序时,POP遵循自上而下的编程方法;

大多数功能允许共享全局数据;

可将较大的程序切分为小的单元(Function);

数据通过功能从一种形式转换为另一种形式;

重视功能的概念.

2.1 POP的优缺点

优点:

  • 提供在不同地方重用相同代码的能力;
  • 有助于跟踪程序流程;
  • 能够构建模块.

缺点:

  • 全局数据不安全,容易被篡改;
  • 部分代码相互依赖;
  • 很难定位数据位置;
  • 实际问题无法建模;

3 面向对象编程(OOP)

OOP是基于“对象”,“类”,“封装或抽象”,“继承”和“多态或重载”的基本概念开发的。在OOP中,可以通过对数据和功能进行分区,将程序划分为模块,如果需要,还可以将其用作创建模块新副本的模板。因此,这是一种通过构造用于数据和功能的分区存储区域来促进程序模块化的方法。

面向对象是模型化的,抽象出一个类,是一个封闭的环境,这个环境中提供数据及方法,使用时无须了解其实现方式,直接使用就行

OOP特征:

  • 对象:它被视为类型类的变量和类的实例。
  • 类:它是一组类似类型的对象。对象的完整数据和代码集通过使用类来创建用户定义的数据类型。
  • 数据抽象和封装:抽象是隐藏背景细节并表示基本特征的方法。封装是一种将数据和功能打包到单个单元中的方法。
  • 继承:继承是一种从一个类到另一个类对象获取对象特征的技术。换句话说,它有助于从现有的类别中派生新类别。
  • 多态性:多态性提供了一种使用单个函数名称创建函数多种形式的方法。
  • 动态绑定:它指定与特定过程关联的代码直到运行时调用时刻才知道。
  • 消息传递:此OOP概念通过发送和接收信息来实现不同类之间的交互。

3.1 OOP的优缺点

优点:

  • Object有助于项目中的任务划分;
  • 通过继承可以减少冗余代码;
  • 代码可以使用可重用性进行扩展;
  • 数据抽象提高了可靠性;
  • 动态绑定是代码更加灵活;
  • 通过数据隐藏可以建立安全的程序;
  • 可以映射对象;
  • 支持将对象分为不同的类;
  • 面向对象的系统更容易更新;
  • 可以实现更大的模块化;
  • 通过使用信息隐藏将基本规范从其实现中解耦.

缺点:

  • 它需要更多资源。
  • 对象的动态行为需要RAM存储。
  • 在执行消息传递时,在复杂的应用程序中检测和调试更加困难。
  • 继承使它们的类紧密耦合,从而影响对象的可重用性。

4 OOP和POP的区别

  • 1 POP是面向过程的编程,POP是面向对象的编程;
  • 2 POP的主要重点是自上而下,遵循流程图来完成功能.OOP的主要重点是保证数据安全性,因为它仅允许类的对象访问类的属性或功能;
  • 3 POP的函数是大程序或者小程序的小部分,执行这些程序即可完成主要功能.OOP的类的属性和功能则是在对象之间划分;
  • 4 POP中没有特定的访问模式限制可以访问的属性或功能.OOP中支持三种访问模式private,protected,public;
  • 5 POP不支持重载/多态的概念.OOP支持重载/多态,可以使用相同的功能名称来执行不同的功能;
  • 6 POP中没有继承的概念,而OOP支持继承,该继承允许通过继承使用其他类的属性和函数;
  • 7 在POP中,如果要在程序的所有功能之间共享某些数据,则会在所有功能之外全局声明该数据。在OOP中,可以通过类的成员函数访问类的数据成员;
  • 8 POP中没有抽象类的概念,而在OOP中,虚拟函数支持多态。

5 OOP和POP的联系

OOP中,Class中实现具体的功能还是需要流程化,具体化的去实现.即面向对象的底层还是现象过程,面向过程抽象成类,然后封装,方便使用就是面向对象.


参考资料
Difference Between OOP and POP
面向对象编程与面向过程编程的区别与联系