`
NeverGiveUpToChange
  • 浏览: 43978 次
  • 性别: 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 的区别 与联系, 以及它们在设计模式上的比较。

    spring aop详细代码示例

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

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

    ### 基于OOP和AOP的软件产品线实现技术研究 #### 一、引言 软件产品线(Software Product Line, SPL)是指在共享一组受控的公共特征的基础上,利用一组预先定义的公共核心资产来开发一系列软件应用系统的工程方法...

    编程(思想) POP OOP AOP IOP

    面向切面编程(AOP)是OOP的补充,它关注程序的“切面”,即跨越多个对象的通用行为,如日志、事务管理等。AOP将这些横切关注点从主业务逻辑中分离出来,允许程序员定义“切点”并在运行时动态插入代码。AOP通过预编译...

    aop介绍

    AOP 是 OOP 的延续,是 Aspect Oriented Programming 的缩写,意思是面向方面编程。AOP 实际是 GoF 设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP 可以说也是这种目标的一种实现。 AOP...

    Spring AOP 16道面试题及答案.docx

    Spring AOP,全称为Aspect Oriented Programming,是面向切面编程的一种编程范式,它是对传统的面向对象编程(OOP)的一种补充。在OOP中,核心是对象,而在AOP中,核心则是切面。切面是关注点的模块化,即程序中的...

    Spring AOP面向方面编程原理:AOP概念

    随着软件系统的日益复杂,传统的面向对象编程(OOP)逐渐暴露出难以应对某些横切关注点(cross-cutting concerns)的问题。为了解决这一挑战,面向方面编程(AOP)应运而生。Spring框架作为Java开发领域的领头羊之一,提供...

    深入理解Android之AOP

    面向切面编程(AOP)是软件开发领域的一项重要技术,它与面向对象编程(OOP)相对应,但关注点不同。在本篇中,我们将深入探讨AOP的基本概念、优势以及在Android开发中的应用,同时与OOP进行比较分析。 首先,面向...

    aop

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

    SpringBoot+AOP+TraceID.pdf

    在 OOP 中只能通过继承类和实现接口来实现,但是这样的缺点是会使代码的耦合度增加,且类继承只能为单继承,阻碍更多行为添加到一组类上,AOP 的出现弥补了 OOP 的不足。 AOP 在 SpringBoot 中的应用 在 ...

    springAOP详解

    AOP 和传统的面向对象编程 (OOP) 在思想上有显著的不同: - **关注点分离**:OOP 关注的是如何将系统划分为类和对象,每个对象负责一部分功能;而 AOP 关注的是如何将跨越多个对象的功能(如日志记录)分离出来并...

    AOP技术的发展及应用

    在实践中,AOP通常与面向对象编程(OOP)结合使用,通过OOP来构建业务模型,而通过AOP来处理横切关注点。这种结合使得开发者能够在保持OOP的灵活性和封装性的同时,解决OOP难以处理的问题,从而实现更高效、更模块化...

    AOP的例子 记录日志

    **切面编程(AOP)**是面向对象编程(OOP)的一种补充,它提供了一种模块化横切关注点的方式,比如日志记录、事务管理、性能监控等。在本例子中,我们将探讨如何使用Spring框架实现AOP来记录日志。 **一、AOP概念**...

    Spring AOP基础关于AOP是什么的理解

    AOP(Aspect Oriented Programming 面向方面的编程)是一种实现横切面的工具,它是 OOP 的补充,而不是 OOP 的竞争对手。AOP 的出现是为了解决 OOP 中的缺陷,即 OOP 中的类封装了自己所必须的业务逻辑,导致类之间...

    SpringAOP的例子

    在传统的OOP中,业务逻辑和横切关注点(如日志、事务、安全性)混合在一起,而在AOP中,我们可以把这些关注点模块化,称为切面(Aspect),然后在运行时将它们织入到目标对象中,实现解耦。 Spring AOP主要通过两种...

    AOP编程入门 Word版

    面向切面编程(Aspect Oriented Programming,简称AOP)是一种编程范式,旨在解决传统面向对象编程(OOP)中的一些问题,如代码重复、高耦合度等。AOP的核心思想是将关注点分离,即把系统中分散的、横切多个对象的...

    AOP所需的4个jar包

    在Java开发领域,面向切面编程(Aspect Oriented Programming,简称AOP)是一种重要的编程范式,它旨在解决传统OOP中的横切关注点问题,如日志、事务管理等。Spring框架是AOP最常用的实现之一。在这个场景中,提到的...

Global site tag (gtag.js) - Google Analytics