OOP与AOP的理解

    本人是搞android开发的,平时对OOP运用比较多,对其思想也自然比较熟悉。相比之下大多数android开发者对AOP的比较默认,所以这里来总结一下两者的区别

1.概念

OOP是面向对象编程,核心思想是将客观存在的不同事物抽象成相互独立的类,然后把与事物相关的属性和行为封装到类里,并通过继承和多态来定义类彼此间的关系,最后通过操作类的实例来完成实际业务逻辑的功能求。

AOP是面向切面编程,核心思想是将业务逻辑中与类不相关的通用功能切面式的提取分离出来,让多个类共享一个行为,一旦这个行为发生改变,不必修改类,而只需要修改这个行为即可。

2.区别

OOP面向对象的三大特征 : 封装 , 继承 , 多态 。这些特征也说明了OOP是面向对象的,我们做什么都是考虑一个对象,我们需要完成一个任务的时候一般都想着把一些操作封装成一个类,所有的变量和操作都封装到一个类里面,那么这个类就是我们的对象,我们要实现某个特定的功能,首先也想想着在这个对象里面去实现。 

OOP将功能分散到不同的对象中去。让不同的类设计不同的方法,这样代码就分散到一个个的类中。可以降低代码的复杂程度,提高类的复用性。

但是在分散代码的同时,也增加了代码的重复性。比如说,我们在两个类中,可能都需要在每个方法中做日志。按照OOP的设计方法,我们就必须在两个类的方法中都加入日志的内容。也许他们是完全相同的,但是因为OOP的设计让类与类之间无法联系,而不能将这些重复的代码统一起来。然而AOP就是为了解决这类问题而产生的,它是在运行时动态地将代码切入到类的指定方法、指定位置上的编程思想。

比如Android中一些按键统计、生命周期统计,特定统计都是比较琐碎的事情,要利用面向对象的思想去实现都不是很完美,这就要求去一一实现,显得很琐碎。

OOD/OOP面向名词领域AOP面向动词领域。 
如果说面向对象编程是关注将需求功能划分为不同的并且相对独立,封装良好的类,并让它们有着属于自己的行为,依靠继承和多态等来定义彼此的关系的话;那么面向方面编程则是希望能够将通用需求功能从不相关的类当中分离出来,能够使得很多类共享一个行为,一旦发生变化,不必修改很多类,而只需要修改这个行为即可。 
两者不但不是互相竞争的技术而且彼此还是很好的互补。面向对象编程主要用于为同一对象层次的公用行为建模。它的弱点是将公共行为应用于多个无关对象模型之间。而这恰恰是面向方面编程适合的地方。有了 AOP,我们可以定义交叉的关系,并将这些关系应用于跨模块的、彼此不同的对象模型。AOP 同时还可以让我们层次化功能性而不是嵌入功能性,从而使得代码有更好的可读性和易于维护。它会和面向对象编程合作得很好。

总结起来就是

1、面向目标不同:简单来说OOP是面向名词领域,AOP面向动词领域。
2、思想结构不同:OOP是纵向结构,AOP是横向结构。
3、注重方面不同:OOP注重业务逻辑单元的划分,AOP偏重业务处理过程的某个步骤或阶段。

 

 

3.AOP在android中的运用

从技术上来说,AOP基本上是通过代理机制实现的。代理模式体现了AOP的思想。

Android中基于AOP实现的库有ButterKnife、dagger2、EventBus3.0、Retrofit 2.0等等,不是说这些库完全基于AOP实现,只是说里面部分功能基于AOP。

 

关于android中AOP部分,再深入就是AspectJ的使用,这是一种类似Java的语言,与java相互兼容,可在android平台运行。有兴趣的可以点链接学习

 

最后说下,两者之间是一个相互补充和完善的关系,如果能掌握好其各自优势并运用,对我们的编程是非常有帮助的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值