`
NeverGiveUpToChange
  • 浏览: 43000 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

AOP VS OOP

 
阅读更多
[转]面向切面编程2012-04-09 13:32AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。



AOP:advance online publication.在线杂志出版物。


  面向切面编程(也叫面向方面):Aspect Oriented Programming(AOP),是目前软件开发中的一个热点,也是Spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。


  AOP是OOP的延续,是(Aspect Oriented Programming)的缩写,意思是面向切面(方面)编程。


  主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。


  主要的意图是:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改



变这些行为的时候不影响业务逻辑的代码。


  可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。


  在Spring中提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。


  Aspect Oriented Programming(AOP)是近来较为热门的一个话题。AOP,国内


  大致译作“面向方面编程”。


  “面向方面编程”,这样的名字并不是非常容易理解,且容易产生一些误导。笔者不止


  一次听到类似“OOP/OOD11即将落伍,AOP是新一代软件开发方式”这样的发言。显然,


  发言者并没有理解AOP的含义。


  Aspect,没错,的确是“方面”的意思。不过,华语传统语义中的“方面”,大多数情


  况下指的是一件事情的不同维度、或者说不同角度上的特性,比如我们常说:“这件事情要


  从几个方面来看待”,往往意思是:需要从不同的角度来看待同一个事物。这里的“方面”,


  指的是事务的外在特性在不同观察角度下的体现。


  而在AOP中,Aspect的含义,可能更多的理解为“切面”比较合适。所以笔者更倾向


  于“面向切面编程”的译法。


  另外需要提及的是,AOP、OOP在字面上虽然非常类似,但却是面向不同领域的两种


  设计思想。OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,


  以获得更加清晰高效的逻辑单元划分。


  而AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步


  骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。这两种设计思想在目标上有


  着本质的差异。


  上面的陈述可能过于理论化,举个简单的例子,对于“雇员”这样一个业务实体进行封


  装,自然是OOP/OOD的任务,我们可以为其建立一个“Employee”类,并将“雇员”相


  关的属性和行为封装其中。而用AOP设计思想对“雇员”进行封装将无从谈起。


  同样,对于“权限检查”这一动作片断进行划分,则是AOP的目标领域。而通过OOD/OOP


  对一个动作进行封装,则有点不伦不类。


  换而言之,OOD/OOP面向名词领域,AOP面向动词领域。

AOP 能够给我们带来什么
  面向过程编程离我们已经有些遥远,面向对象编程正主宰着软件世界。当每个新的软件设计师都被要求掌握如何将需求功能转化成一个个类,并且定义它们的数据成员、行为,以及它们之间复杂的关系的时候,面向方面编程(Aspect-Oriented Programming,AOP)为我们带来了新的想法、新的思想、新的模式。


  如果说面向对象编程是关注将需求功能划分为不同的并且相对独立,封装良好的类,并让它们有着属于自己的行为,依靠继承和多态等来定义彼此的关系的话;那么面向方面编程则是希望能够将通用需求功能从不相关的类当中分离出来,能够使得很多类共享一个行为,一旦发生变化,不必修改很多类,而只需要修改这个行为即可。


  面向方面编程是一个令人兴奋不已的新模式。就开发软件系统而言,它的影响力必将会和有着十数年应用历史的面向对象编程一样巨大。面向方面编程和面向对象编程不但不是互相竞争的技术而且彼此还是很好的互补。面向对象编程主要用于为同一对象层次的公用行为建模。它的弱点是将公共行为应用于多个无关对象模型之间。而这恰恰是面向方面编程适合的地方。有了 AOP,我们可以定义交叉的关系,并将这些关系应用于跨模块的、彼此不同的对象模型。AOP 同时还可以让我们层次化功能性而不是嵌入功能性,从而使得代码有更好的可读性和易于维护。它会和面向对象编程合作得很好。



AOP 和 OOP 到底是什么关系


  很多人在初次接触 AOP 的时候可能会说,AOP 能做到的,一个定义良好的 OOP 的接口也一样能够做到,我想这个观点是值得商榷的。AOP和定义良好的 OOP 的接口可以说都是用来解决并且实现需求中的横切问题的方法。但是对于 OOP 中的接口来说,它仍然需要我们在相应的模块中去调用该接口中相关的方法,这是 OOP 所无法避免的,并且一旦接口不得不进行修改的时候,所有事情会变得一团糟;AOP 则不会这样,你只需要修改相应的 Aspect,再重新编织(weave)即可。 当然,AOP 也绝对不会代替 OOP。核心的需求仍然会由 OOP 来加以实现,而 AOP 将会和 OOP 整合起来,以此之长,补彼之短。

1
0
分享到:
评论

相关推荐

    论AOP与OOP.pdf

    AOP学术论文,近年来, 继面向过程编程和面向对象编程之后, 又一种新的编程思想被提出, 并被《MIT 技术评论》杂志评为...本文主要介绍了AOP 是如何产生的, 并阐述了它与OOP 的区别 与联系, 以及它们在设计模式上的比较。

    面向切面(AOP)与面向对象(OOP)

    火龙果软件工程技术中心 首先你要明确的一点,AOP和OOP是两种不同的认识事物的角度,并不是说有了AOP就不要用OOP.AOP所关注的是传统OOP不能优雅解决的问题.(程序员通常都是完美主义者,当解决某个问题不优雅的时候,那...

    spring aop详细代码示例

    AOP(Aspect-Oriented Programming)这个东西,名字与 OOP 仅差一个字母,其实它是对 OOP 编程方式的一种补充,并非是取而代之。翻译过来就是“面向方面编程”,可我更倾向于翻译为“面向切面编程”。最好的演示案例...

    基于OOP 和AOP的软件产品线实现技术研

    显然,结合OOP 和AOP 这两种技术实现的产品线系统将 具有更高的可复用性、灵活性和可配置性。本文在相关问题分析的基础上对基于OOP 和AOP 的产品线实现技术进行了研究,并通 过一个酬金发放系统产品线的实例分析对...

    springaop学习方法

    AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性...

    aop

    AOP是对OOP的补充和完善,它允许开发人员动态修改OOP定义的静态对象模型--- 开发者可以不用修改原始的OOP对象模型,甚至无须修改OOP代码本身,就能够 解决“多个不具有继承层次的对象引入同一公共行为”的问题

    用Java动态代理实现AOP

    Java初学者不禁要发出感慨,OOP还没有学通呢,又来AOP。本文不是要在理论上具体阐述何为AOP, 为何要进行AOP . 要详细了解学习AOP可以到它老家http://aosd.net去瞧瞧。这里只是意图通过一个简单的例子向初学者展示...

    面向方面编程AOP

    AOP是OOP的延续,是(Aspect Oriented Programming)的缩写,意思是面向切面编程。 OO注重的是我们解决问题的方法(封装成Method),而AOP注重的是许多解决问题的方法中的共同点,是对OO思想的一种补充! 主要的功能是:...

    AOP技术及其在J2EE中动态代理实现

    随着软件技术的发展及需求的增加,OOP逐渐表现出其不足之处,AOP在继承OOP基础之上很好地解决了00P 所面临的困难。针对OOP编程思想的一种补充,AOP编程思想通过分离出与系统核心业务实现无关的模块,减少模块 问的...

    编程(思想) POP OOP AOP IOP

    面向过程编程(思想)POP(Procedure Oriented ...面向对象编程(思想)OOP (Object Oriented Programming) 面向切面编程(思想)AOP (Aspect Oriented Programming) 面向接口编程(思想)IOP (Interface Oriented Programming)

    Java编程中使用动态代理实现AOP功能(附项目设计实例)

    本文详细介绍了Java编程中使用动态代理实现AOP功能,AOP是OOP的延续,意思是面向切面编程。 从这篇文章可以大体理解spring AOP的原理。

    AOP 入门学习介绍文档

    AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合...

    AOPDemo:AOP切面demo

    它和我们平时接触到的OOP都是编程的不同思想,OOP,即『面向对象编程』,它提倡的是将功能模块化,对象化,而AOP的思想,则不太一样,它提倡的是针对同一类问题的统一处理,通过预编译方式和运行期动态代理实现程序...

    论文研究-面向方面的编程的研究与实现.pdf

    面向方面的编程(AOP)是一种新的编程技术,它弥补了面向对象的编程(OOP)在跨越模块行为上的不足。 AOP 引进了Aspect,它将影响多个类的行为封装到一个可重用模块中,它允许程序员对横切关注点进行模块化,从而消除了...

    xujiyou#blog-data#AOP详解1

    AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。之前看了一个博客说到,提到AOP大家都知道他的实

    Spring的AOP

    Spring的一个关键组件就是AOP框架 Spring的IoC容器并不依赖于AOP,也就是说,是不是用AOP都是你自己的选择;AOP完善了Spring的IoC容器 提供声明式企业服务,可以作为...允许用户定义自己的方面,使用AOP来完善OOP的使用

    CH03-AOP面向切面编程.pptx

    AOP是对OOP的补充,是软件开发中的一个热点,也是Spring框架中的一个重要内容。 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率

    spring-aop.zip

    作为继OOP后对程序员影响最大的编程思想之一,AOP极大地拓展了人们的编程思路。Spring以JVM的动态代理技术为基础,设计出了一系列的AOP横切实现,比如前置通知、返回通知、异常通知等。同时,Pointcut接口可以匹配...

    使用动态代理演示Spring的AOP编程原理

    前置条件:了解Java的反射技术、了解Spring的配置档、熟悉OOP编程思想。 使用步骤: 1. 下载解压之后,使用Eclipse导入工程 2. 运行com.jb.arklis.demo.proxy.DynamicProxyDemo类 3. 如果一切正常,那么你会到业务...

Global site tag (gtag.js) - Google Analytics