浅谈 POP/OOP/AOP

这三者分别是什么

Posted by yebin-yu on July 20, 2023

简介

编程思想就是一种解决现实问题的一种思考方式,而每一种语言都是对现实问题描述进行抽象,从而让计算机去解决。

  • POP:面向过程编程(Process-oriented programming )
  • OOP:面向对象编程(Object Oriented Programming)
  • AOP:面向切面编程(Aspect Oriented Programming)

POP:

“面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。 这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。与面向对象明显的不同就是封装、继承、类,并简写为POP

面向过程就是以功能为中心来进行思考和组织分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

举个栗子:将编程当成是做一件事,要按步骤完成,每一步就是一个过程。比如某个人要打扫房间这件事,需要先取扫帚,然后仔仔细细打扫每一处,最后将扫帚放回原地。

OOP:

面向对象(Object Oriented,OO)作为一种新型的程序设计方法,其是以对象模型为基础进行的抽象过程,并在应用过程中形成了描述自己的抽象概念定义,包括对象、类、封装、继承以及多态等。 面向对象编程是使用对象的编程范式——包含数据域、方法以及它们之间的交互来设计应用和程序。其程序设计方法包括数据抽象、封装、通信、模块化、多态和继承。简单来看,我们可以对面向对象编程作出如下几点理解:首先,它必须将数据抽象为模块结构;其次,必须存在某种方式来实现代码的多态执行;最后,它至少能部分压缩代码和函数。

面向对象就是将我们的程序模块化,对象化,把具体事物的特性属性和通过这些属性来实现一些动作的具体方法放到一个类里面。面向对象就是将编程当成是一个事物(相当于一个整体的东西),对外界来说,事物是直接使用的,不用去管他内部的情况。满足面向对象编程的语言,一般会提供类、封装、继承等语法和概念来辅助我们进行面向对象编程。

举个栗子:面向过程就好像自己去打扫房间,所以要讲究步骤,而面向对象就好像你只要通知扫地机器人打扫房间,即发一个消息就可以了,至于机器人怎样打扫,是不用知道的。面向对象就有点像是将面向过程放在了事务的内部。

面向对象的三大特征:继承,封装,多态。封装可以隐藏实现细节同时包含私有成员,使得代码模块化并增加安全指数;继承则可以扩展已存在的模块,目的是为了代码重用;多态则是为了保证:类在继承和派生的时候,保证家谱中任何类的实例被正确调用,实现了接口重用

AOP:

面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

AOP采取横向抽取机制,即将分散在各个方法中的重复代码提取出来,然后在程序编译或运行阶段,再将这些抽取出来的代码应用到需要执行的地方。编程中,对象与对象之间,方法与方法之间,模块与模块之间都是一个个切面。

面向切面编程的思想里面,把功能分为核心业务功能,和周边功能。周边功能在Spring的面向切面编程AOP思想里,被定义为切面。在面向切面编程AOP的思想里面,核心业务功能和切面功能分别独立进行开发,然后把切面功能和核心业务功能 “编织” 在一起,这就叫AOP。

关系:

面向过程与面向对象(局部与整体)思维上来讲,面向过程更强调细节,忽视了整体性和边界性,面向过程虽然反映了现实世界的而一个方面(功能),但无法更加形象的模拟或者表示现实世界。面向对象强调的是整体性,因此面向对象与面向过程在很多方面是可以互补的,面向对象是将事物高度抽象化,面向对象必须先建立抽象模型,之后直接使用模型就行了。

面向对象依然保留着面向过程的特性,面向过程中的功能变成了对象的方法,加工处理功能变成了对象的服务性方法,而这部分方法依然需要外界的输入,同时也对外界进行输出,只是输入和输出也变成了对象

面向方面应该属于面向对象的范畴,从对象组织角度来讲,我们一般采用的分类方法都是使用类似生物学分类的方法,以“继承”关系为主线,我们称之为纵向。但事实上,对象之间除了这种纵向分类之外,我们同样可以从横向的角度去观察这些对象,这就是面向方面(切面)编程的基本出发点