POP——面向过程编程(Process-oriented programming):
面向过程就是以功能为中心来进行思考和组织分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
举个栗子:将编程当成是做一件事,要按步骤完成,每一步就是一个过程。比如某个人要打扫房间这件事,需要先取扫帚,然后仔仔细细打扫每一处,最后将扫帚放回原地。
OOP——面向对象编程(object oriented programming):
面向对象就是将我们的程序模块化,对象化,把具体事物的特性属性和通过这些属性来实现一些动作的具体方法放到一个类里面。面向对象就是将编程当成是一个事物(相当于一个整体的东西),对外界来说,事物是直接使用的,不用去管他内部的情况。满足面向对象编程的语言,一般会提供类、封装、继承等语法和概念来辅助我们进行面向对象编程。
举个栗子:面向过程就好像自己去打扫房间,所以要讲究步骤,而面向对象就好像你只要通知扫地机器人打扫房间,即发一个消息就可以了,至于机器人怎样打扫,是不用知道的。面向对象就有点像是将面向过程放在了事务的内部。
面向对象的三大特征:继承,封装,多态。封装可以隐藏实现细节同时包含私有成员,使得代码模块化并增加安全指数;继承则可以扩展已存在的模块,目的是为了代码重用;多态则是为了保证:类在继承和派生的时候,保证家谱中任何类的实例被正确调用,实现了接口重用
AOP——面向切面编程(Aspect Oriented Programming):
AOP采取横向抽取机制,即将分散在各个方法中的重复代码提取出来,然后在程序编译或运行阶段,再将这些抽取出来的代码应用到需要执行的地方。编程中,对象与对象之间,方法与方法之间,模块与模块之间都是一个个切面。
面向切面编程的思想里面,把功能分为核心业务功能,和周边功能。周边功能在Spring的面向切面编程AOP思想里,被定义为切面。在面向切面编程AOP的思想里面,核心业务功能和切面功能分别独立进行开发,然后把切面功能和核心业务功能 "编织" 在一起,这就叫AOP
关系:
面向过程与面向对象(局部与整体)思维上来讲,面向过程更强调细节,忽视了整体性和边界性,面向过程虽然反映了现实世界的而一个方面(功能),但无法更加形象的模拟或者表示现实世界。面向对象强调的是整体性,因此面向对象与面向过程在很多方面是可以互补的,面向对象是将事物高度抽象化,面向对象必须先建立抽象模型,之后直接使用模型就行了。
面向对象依然保留着面向过程的特性,面向过程中的功能变成了对象的方法,加工处理功能变成了对象的服务性方法,而这部分方法依然需要外界的输入,同时也对外界进行输出,只是输入和输出也变成了对象
面向方面应该属于面向对象的范畴,从对象组织角度来讲,我们一般采用的分类方法都是使用类似生物学分类的方法,以“继承”关系为主线,我们称之为纵向。但事实上,对象之间除了这种纵向分类之外,我们同样可以从横向的角度去观察这些对象,这就是面向方面(切面)编程的基本出发点