面向方面(aspect)的程序设计方法

合集下载

AOP

AOP
),元数据就是在静态或是运 (4)元数据(metadata),元数据就是在静态或是运 )元数据( ), 行的时间绑定到一个类的附加信息,更强大的一方面, 行的时间绑定到一个类的附加信息,更强大的一方面, 能够动态的绑定元数据到一个给定的对象实例. 能够动态的绑定元数据到一个给定的对象实例.当我 们在编写能够应用任何对象的一般方面时, 们在编写能够应用任何对象的一般方面时,而逻辑需 要知道制定类的信息时,元数据就显得非常强大. 要知道制定类的信息时,元数据就显得非常强大.
AOP实现方式
1 横切点实现方式
AOP中横切关注点的实现方式是这样的, 中横切关注点的实现方式是这样的, 中横切关注点的实现方式是这样的 函数是advice 实现并封装在 实现并封装在Aspect中,编 函数是 中 织器将advice的调用语句无缝的织入到其它 织器将 的调用语句无缝的织入到其它 的模块中.编程者只需要在aspect中通过 的模块中.编程者只需要在 中通过 pointcut- designator定义需要织入的位 定义需要织入的位 以及定义advice的功能,剩下就让编织 的功能, 置,以及定义 的功能 器来完成就可以了. 器来完成就可以了 2 AspectJ的编织器的实现方式 的编织器的实现方式 目前, 的实现方式主要有两种: 目前,AOP的实现方式主要有两种:动态织 的实现方式主要有两种 入和静态织入. 入和静态织入.
AOP背景
AOP设计并不是万能的,它是在oop设计的发 设计并不是万能的,它是在 设计并不是万能的 设计的发 展过程中诞生的, 认为: 展过程中诞生的,Gregor Kiczales 认为:"我们 并没有也不想把一切推倒重来, 并没有也不想把一切推倒重来,我们提供的只是一种 15%的解决方案".通过对比 的解决方案" 通过对比AOP和OOP的技术实 的解决方案 和 的技术实 在对象之间的横向连接不是很频繁的情况下, 现,在对象之间的横向连接不是很频繁的情况下, AOP并不比 并不比OOP有多大的优势,所以,AOP 是对 有多大的优势, 并不比 有多大的优势 所以, OOP在某些应用场合的补充.AOP就是分离横切关注 在某些应用场合的补充. 在某些应用场合的补充 就是分离横切关注 点来实现软件的模块之间的松散耦合, 点来实现软件的模块之间的松散耦合,从而提高软件 的可维护性和可复用性. 的可维护性和可复用性.

spring官网在线学习文档翻译5

spring官网在线学习文档翻译5

spring官⽹在线学习⽂档翻译55. Aspect Oriented Programming with Spring(使⽤Spring进⾏⾯向切⾯编程)5.1. Introduction(⼊门)Aspect-Oriented Programming (AOP) complements Object-Oriented Programming (OOP) by providing another way of thinking about program structure. The key unit of modularity in OOP is the class, whereas in AOP the unit of modularity is the aspect. Aspects enable the modularization of concerns such as transaction management that cut across multiple types and objects. (Such concerns are often termed crosscutting concerns in AOP literature.)⾯向⽅⾯程序设计(AOP)通过提供另⼀种考虑程序结构的⽅法来补充⾯向对象程序设计(OOP)。

OOP中模块性的关键单元是类,⽽AOP中模块性的单元是⽅⾯。

⽅⾯⽀持关注点的模块化,例如跨多个类型和对象的事务管理。

(在AOP⽂献中,这样的关注点通常被称为横切关注点。

)One of the key components of Spring is the AOP framework. While the Spring IoC container does not depend on AOP, meaning you do not need to use AOP if you don’t want to, AOP complements Spring IoC to provide a very capable middleware solution.Spring的关键组件之⼀是AOP框架。

电脑中常见英文缩写解释

电脑中常见英文缩写解释

电脑中常见英文缩写解释(一)在学习电脑知识的过程中, 经常要碰到一些电脑英语与缩写, 了解一些常见的电脑英文缩写是很有好处的.ADO ActiveX Data Object ActiveX数据对象ALM Application Lifecycle Management 开发生命周期管理ANSI American National Standard Institute 美国国家标准工会AOP Aspect-Oriented Programming 面向方面的程序设计 AI Artificial Intelligence 人工智能ADO ActiveX Data Object ActiveX数据对象ALM Application Lifecycle Management 开发生命周期管理ANSI American National Standard Institute 美国国家标准工会AOP Aspect-Oriented Programming 面向方面的程序设计AI Artificial Intelligence 人工智能AI Action Item 活动项API Application Programming interface 应用编程接口ASCII American Standard Code of Information InterchangeASP Active Server Page 动态服务端网页Absolute location 绝对位置Agile methodology 敏捷方法学Application-independent 程序相依性BDE Borland Database Engine Borland数据引擎BSF Bean scripting Framework Bean脚本框架VT Build Verification Tests 创建确认测试CA Comprehensive audit 综合检查CBD Component-Based Development 基于组件的软件开发。

aop的一些术语

aop的一些术语

aop的一些术语AOP(面向切面编程)是一种软件编程的方法论,它通过将系统的不同关注点分离开来,提供了一种更高层次的抽象。

在AOP中,有一些术语是我们需要了解的,下面将分别介绍这些术语的含义和作用。

1. 切面(Aspect)切面是AOP中的一个核心概念,它是对一组关注点的抽象。

切面用于描述横跨多个对象的功能,它由切点和通知组成。

切面可以被看作是一个模块化的部分,它将关注点从主要业务逻辑中分离出来。

2. 连接点(Join Point)连接点是在程序执行过程中能够插入切面的特定点。

通常情况下,连接点可以是方法调用、异常抛出、字段访问等。

连接点是AOP的触发点,它会触发切面的执行。

3. 切点(Pointcut)切点用于定义切面在哪些连接点上被触发。

切点通过使用表达式进行匹配,从而选择出连接点。

切点可以被看作是一个筛选器,它只选择与表达式匹配的连接点。

4. 通知(Advice)通知是切面在特定连接点上执行的代码。

通知可以在连接点之前、之后或者发生异常时执行。

常见的通知类型有前置通知(Before)、后置通知(After)、返回通知(After Returning)和异常通知(After Throwing)。

5. 引入(Introduction)引入是AOP中一个特殊的通知类型,它允许向现有的类添加新的方法或属性。

引入可以在运行时动态地为类添加新的行为,而不需要修改原始类的代码。

6. 织入(Weaving)织入是将切面应用到目标对象并创建新的代理对象的过程。

织入可以在编译时、类加载时或者运行时进行。

在织入过程中,切面的代码会被插入到目标对象的相应连接点上。

7. 目标对象(Target Object)目标对象是被切面织入的对象。

目标对象通常是应用程序中的一个普通对象,它会被切面的代码所影响。

8. 代理对象(Proxy Object)代理对象是包装了目标对象的对象,它能够拦截对目标对象的访问并在必要时执行切面的代码。

面向切面编程的概念-概述说明以及解释

面向切面编程的概念-概述说明以及解释

面向切面编程的概念-概述说明以及解释1.引言1.1 概述概述部分的内容可以从以下几个角度来进行撰写:1. 引入面向切面编程的概念:面向切面编程(Aspect-Oriented Programming,AOP)是一种编程思想和方法,它从程序的操作流程中提取出横跨多个模块的通用功能,被称为切面(Aspect),并将其独立于业务逻辑进行封装和管理。

切面编程通过将横切关注点与主要业务逻辑分离,提供了一种更加模块化和可维护的编程方式。

2. AOP的核心原理:AOP的核心原理是通过将程序划分为主要业务逻辑和横切关注点两个部分,并在运行时通过动态代理或字节码操作等技术将横切关注点织入到主要业务逻辑中。

这样可以避免代码中的冗余和重复,同时也提供了一种更灵活和可扩展的方式来管理和维护通用功能。

3. AOP与OOP的关系:AOP与面向对象编程(Object-Oriented Programming,OOP)并不是互斥的。

实际上,AOP可以作为一种补充和扩展,与OOP结合使用,以提供更加细粒度和模块化的功能。

AOP可以处理跨多个对象和类的横切关注点,而OOP则更聚焦于对象的属性和行为。

4. AOP的应用领域:AOP可以应用于各种软件系统和应用领域。

例如,在日志记录、事务管理、性能监控、安全控制等方面,AOP可以提供一种统一的解决方案。

通过将这些通用功能模块化并抽取为切面,可以方便地在需要的地方进行统一的管理和调用。

5. 文章结构:本文将从切面编程的定义和原理,切面编程的应用场景,以及切面编程的优势和局限性,未来切面编程的发展方向等方面进行探讨。

通过对AOP的深入研究,可以帮助读者更好地理解和应用切面编程的概念。

1.2 文章结构文章结构部分的内容如下:文章结构部分旨在介绍本文的大纲和组织结构。

通过明确文章的结构安排,读者可以更好地理解整篇文章的内容和逻辑关系。

本文分为引言、正文和结论三个部分。

引言部分包括概述、文章结构和目的三个小节。

aop 术语解释

aop 术语解释

aop 术语解释AOP是面向切面编程(Aspect-Oriented Programming)的缩写,是一种软件开发方法和编程范式,旨在将横切关注点从主要业务逻辑中分离出来,并在应用程序中以模块化的方式进行管理。

下面是一些与AOP相关的术语解释:1. 切面(Aspect):切面是AOP中的一个模块化单元,它封装了横切关注点的行为,例如日志记录、错误处理或事务管理。

切面可以在应用程序中的多个地方被重用。

2. 连接点(Join Point):连接点是应用程序中可以插入切面的特定点,例如方法的调用、异常抛出或字段的修改。

切面可以通过在连接点上织入代码来改变应用程序的行为。

3. 通知(Advice):通知是切面在连接点上执行的动作。

通知的类型包括前置通知(在连接点之前执行)、后置通知(在连接点之后执行)、环绕通知(在连接点前后执行)等。

4. 切入点(Pointcut):切入点用于定义一组连接点的表达式,它决定了切面在何处插入应用程序的代码。

切入点可以通过正则表达式或其他方式指定。

5. 引入(Introduction):引入允许为现有的类添加新的方法或属性,而不需要修改原始类的代码。

它可以通过切面的方式在运行时动态地将新功能引入到现有的类中。

6. 织入(Weaving):织入是将切面应用到目标对象中的过程。

它可以在编译时、类加载时或运行时进行。

织入可以通过源代码修改、字节码修改或代理方式实现。

7. 目标对象(Target Object):目标对象是应用程序中的原始对象,它包含了主要的业务逻辑。

切面会在目标对象的方法执行前、执行后或抛出异常时插入代码。

8. 强制(Weaver):强制是负责在运行时创建切面的工具或框架。

它可以通过字节码增强、动态代理或其他技术来实现切面的织入。

9. 引入(Mixin):引入是AOP中的一个概念,用于在现有类中添加新的方法或属性。

这种引入是通过切面在运行时动态添加的,而不需要修改原始类的代码。

aop 切点表达式的几种方式

AOP(Aspect-Oriented Programming,面向切面编程)是一种程序设计范式,它将横切关注点与主要业务逻辑分开,使得程序更具模块化、可维护性和可重用性。

在AOP中,切点表达式是非常重要的一部分,它用于定义被拦截的方法或者代码段。

本文将对AOP切点表达式的几种方式进行探讨和分析,以帮助读者更深入地理解AOP编程的精髓。

1. 方法名匹配方式方法名匹配是AOP切点表达式的最基本形式之一。

它通过直接指定方法的名称来匹配被拦截的方法。

我们可以使用“execution(*.example.service.*.*(..))”这样的切点表达式来匹.example.service包下的所有方法。

但是需要注意的是,方法名匹配方式比较僵硬,如果方法名称发生变化,切点表达式也需要相应修改,因此在实际开发中使用较少。

2. 方法访问修饰符匹配方式方法访问修饰符匹配是一种更加灵活的切点表达式方式。

它可以根据方法的访问修饰符来进行匹配,比如public、protected、private等。

“execution(*.example.service.*.*(..)) && within.example..*)”这样的切点表达式就可以匹.example包及其子包下所有public方法。

3. 注解匹配方式注解匹配是AOP切点表达式中更加灵活和强大的一种方式。

我们可以使用注解来标记被拦截的方法,然后在切点表达式中通过@annotation(注解名称)的方式来进行匹配。

这样一来,只需要对特定的方法添加注解,就能够方便地进行切面编程。

“@annotation.example.annotation.MyAnnotation)”这样的切点表达式可以匹配所有被MyAnnotation注解标记的方法。

总结回顾:通过本文的探讨,我们可以看到AOP切点表达式有多种匹配方式,包括方法名匹配、方法访问修饰符匹配和注解匹配。

Java中的面向切面编程技巧

Java中的面向切面编程技巧面向切面编程(Aspect-Oriented Programming,AOP)是一种编程范式,它的目的是通过将横切关注点(cross-cutting concern)与主要业务逻辑分离,提供更好的模块化和可维护性。

在Java中,AOP是通过使用代理模式和动态代理来实现的。

本文将介绍一些在Java中实现AOP的常用技巧。

1. 利用动态代理实现AOP动态代理是Java中实现AOP的一种常用方式。

通过动态代理,我们可以在不修改原有代码的情况下,对方法进行增强或拦截。

在Java中,可以使用JDK自带的动态代理或者第三方库(如CGLIB)来实现。

JDK动态代理是基于接口的代理,它要求被代理的类实现一个接口。

通过实现InvocationHandler接口,我们可以在代理对象的方法调用前后加入自己的逻辑。

例如,我们可以在方法调用前进行权限检查,或者在方法调用后进行日志记录。

CGLIB动态代理是基于继承的代理,它可以代理没有实现接口的类。

通过继承被代理类,并重写其中的方法,我们可以在方法调用前后加入自己的逻辑。

CGLIB 动态代理通常比JDK动态代理更快,但也更复杂一些。

2. 使用注解定义切面在Java中,我们可以使用注解来定义切面。

通过在切面类上添加特定的注解,我们可以指定切面的作用范围和执行顺序。

例如,可以使用@Before注解来指定在目标方法执行前执行切面逻辑,使用@After注解来指定在目标方法执行后执行切面逻辑。

使用注解定义切面可以提高代码的可读性和可维护性。

通过注解,我们可以清晰地看到哪些方法是切面逻辑,哪些方法是目标方法。

同时,我们也可以方便地对切面进行扩展和修改。

3. 利用Spring框架实现AOPSpring框架是Java中最常用的开发框架之一,它提供了强大的AOP支持。

通过使用Spring框架,我们可以方便地实现AOP,并集成到我们的应用中。

在Spring框架中,我们可以使用@Aspect注解来定义切面。

软件开发中面向切面编程的应用

软件开发中面向切面编程的应用在软件开发中,面向切面编程(Aspect-Oriented Programming)是一种比较流行的技术和开发范式。

它与传统面向对象编程(Object-Oriented Programming)相比,更加注重横向的关注点,而不是纵向的职责分离。

本文将从面向切面编程的定义、应用场景以及实现方式等方面进行探讨。

一、面向切面编程的定义面向切面编程是一种编程范式,其核心思想是将系统中与业务无关的公共行为抽离出来,通过某种方式进行集中化,并通过动态代理等手段,在需要时将其动态植入到系统中的目标对象中,相当于对目标对象进行了增强。

这种公共行为通常包括日志记录、事务管理、安全检验、性能监测等。

与传统的面向对象编程相比,面向切面编程更加注重模块化和可重用性,可以将公共功能切分为独立的模块,以供不同的业务模块进行引用和复用。

二、面向切面编程的应用场景面向切面编程可以应用于各种类型的软件开发项目中,特别是那些需要处理大量交叉切面(Cross-cutting Concerns)的项目。

交叉切面是指那些不在单个模块或部件中集中出现,而是散布在系统各处的一些通用问题。

例如,日志记录可能是所有业务操作都需要的功能,因此可以被抽离出来,作为一个独立的交叉切面,被动态植入到其他业务模块中。

又比如,对系统中的所有数据操作进行性能监测,也可以作为交叉切面进行处理。

三、面向切面编程的实现方式面向切面编程可以通过多种手段进行实现,常见的包括:(一)静态编译在编译期间,对代码进行预处理,将切面关注点的代码插入到目标对象的代码之中。

但是这种方式的局限性比较大,因为预处理的代码通常只能针对特定的对象和方法进行处理,无法达到动态配置和灵活管理的目的。

(二)动态代理通过动态代理技术,将目标对象包装在代理对象中,并在代理对象的方法执行过程中,向目标对象的特定方法进行动态注入。

这种方式可以比较灵活地处理多种切面关注点,并可以动态配置和管理。

理解与应用面向切面编程的概念与技术

理解与应用面向切面编程的概念与技术面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式和编程技术,它的主要目的是通过将横切关注点(Cross-Cutting Concerns)从核心业务逻辑中分离出来,使得程序的结构更清晰,模块之间的关系更加松散,提高代码的可维护性和可重用性。

1.横切关注点:在软件开发中,除了核心的业务逻辑外,还存在一些与之相关的非功能性需求,这些需求被称为横切关注点。

例如日志记录、安全验证、性能监控、事务管理等。

这些关注点通常散布在软件的不同模块和层次中,与核心业务逻辑相互交织在一起。

传统的面向对象编程无法很好地处理这些横切关注点,导致代码的可读性和可维护性下降。

2.AOP的概念:AOP可以看作是一种补充和扩展面向对象编程的技术。

它通过在程序运行过程中,动态地将横切关注点织入到核心业务逻辑中,减少了类和方法之间的耦合度,使得横切关注点可以独立于核心业务逻辑进行开发和维护。

AOP采用了一种称为“切面”的概念,切面是对横切关注点的模块化封装,通常以某种特殊的声明方式(如注解、XML配置等)进行定义。

切面可以在程序运行时被动态织入到目标对象中,从而实现对横切关注点的控制。

3.AOP的技术实现:AOP有多种技术实现方式,常用的有基于代理(Proxy-based)的方式和基于字节码操作(Bytecode Manipulation)的方式。

3.1基于代理的AOP:基于代理的AOP是AOP最常见的实现方式,它基于Java的动态代理机制或CGLib技术,在运行时动态生成一个代理对象,该代理对象通过调用目标对象的方法,并在方法的调用前后执行一些附加的操作,从而实现了AOP的效果。

代理对象可以作为目标对象的代表,被其他对象直接调用,从而使得横切关注点得以执行。

在基于代理的AOP中,切面定义了一些增强(Advice),它们是一个独立于目标对象的模块,可以分别插入到目标对象的不同位置进行执行。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

面向方面(aspect)的程序设计方法程虎摘要 面向方面的程序设计(Aspect—Oriented Programming, AOP)是一种很有前途的新型程序设计方法,它是面向过程、面向对象方法的进一步发展。

通过引入方面概念,改进关注点的分离(separation of concerns),减少代码缠结(code tangling)解决横切关注点(cross cutting concerns)的问题,提高软件质量和效率。

自1997年AOP以来的7年间,全球已开展大量有关研究与开发工作,并自2002年起每年召开专门的国际学术会议(International conf .on Aspect-Oriented Software Development,AOSD)探讨问题,交流取得的成果。

关键词 方面,面向方面的程序设计(AOP),关注点,横切关注点,面向方面的软件开发(AOSD)。

1引言计算机软件包括程序及其文档。

程序设计包括设计、编制和调试程序的方法与过程。

程序设计方法涉及用于指导程序设计工作的原理和原则,以及基于这些原理和原则的设计方法和技术。

数十年来,经历公式翻译、过程式程序设计、结构化程序设计、逻辑式程序设计、函数式程序设计以及面向对象程序设计等。

程序设计方法学可以对程序设计人员选用具体的程序设计方法起指导作用,而具体的程序设计方法对象程序设计工作的质量以及所设计出来的程序(即软件)的质量影响巨大。

世间事物总是在不断发展变化,螺旋式上升。

程序设计方法也如此,近年来流行面向对象程序设计方法。

面向对象的方法起源于面向对象的编程语言,可以追溯到20世纪60年代后期的Simula67语言。

到20世纪末,面向对象方法已逐步发展成为一类完整的方法学和系统化的技术体系。

它不仅指导编程设计,还指导开发操作系统、数据库、网络和编译系统等。

使用面向对象语言来实现面向对象设计相对而言比较容易,用非面向对象语言也可实现面向对象设计。

也有这种情况,即使用了面向对象语言,但由于未掌握面向对象的思维方法,开发出来的软件也未必是面向对象的。

所以说,掌握面向对象的编程思想方法,如同获得练气功的真谛,它的重要性往往胜过了对编程语言的选择。

面向对象方法有诸多优点,如使软件体系结构良好,便于软件构件化、软件复用和软件维护等。

但经过这么多年实践摸索,人们也发现面向对象方法有其不足,如许多软件系统不完全都能按系统的功能来划分构件,要完成的业务功能只是核心级关注点(concerns),此外,还有不少系统级关注点,它们是完成核心级关注点所必须的配套设施,如日志记录、跟踪、出错处理和安全检测等。

这些系统级关注点与核心功能级关注点有交叉(cut-cross)。

当系统级关注点能相对分割地在基本功能中考虑和分析时,使用当前的面向对象语言导致在许多构件中要重复包含(扩散)这些代码,源程序就要变成一些为不同目的而编制的指令的缠结(tangling)混乱物。

缠结现象是现有软件系统中许多不必要的复杂性的核心。

它增加了功能构件之间的依赖性,分散了构件原来假定要做的事情,提供了许多程序设计出错的机会,使得一些功能构件难以复用,源代码难以开发、理解和发展。

按软件生命周期的阶段来说,在设计阶段,以类(class)为单位组织建模不全面;在编码阶段,把数据和方法都封装成类,不灵活、不便复用;在维护阶段,由于缠结原因造成难理解、难维护。

因此,人们就想到面向方面(aspects)的方法。

这一概念最早是由施乐(Xerox)公司在美国加州硅谷PaloAlto研究中心(PARC)的首席科学家、加拿大大不列颠哥伦比亚大学教授Gregor Kicgales等人首次在1997年的欧洲面向对象编程大会(ECOOP 97)上提出。

2基本概念2.1 方面(aspect)从抽象意义上讲,是对软件系统构件的性能和语法产生一定影响的一些属性;从设计上讲是横切系统的一些软件系统级关注点;从实现上讲,是一种程序设计单元,它支持将横切系统的关注点封装在单独的模块单位中,是AOP将横切关注点局部化和模块化的实现机制。

通过将横切关注点集中到aspect中,AOP就取得一种单一的结构化行为,该行为在传统程序中分布于整个代码里。

在AOP中,aspect是一阶实体,aspect 之于AOP,正如class 之于 oop。

2.2 面向方面的程序设计(AOP)AOP是一种关注点分离技术,通过运用aspect这种程序设计单元,允许开发者使用结构化的设计和代码,反映其对系统的认识方式。

要使设计和代码更加模块化、更具结构化,使关注点局部化而不是分散于整个系统中。

同时,需使关注点和系统其他部分保持良好定义的接口,从而真正达到“分离关注点,分而治之”的目的。

类似于传统语言的语言编译器,aspect语言有相应的编织器(weaver),它能像编织地毯、壁毯那样,把各式彩线经纬纵横地编织出美丽的图案。

2.3 关注点(concern)关注点就是一个特定的目标、概念或者兴趣域。

从过程的角度,典型的开发关注点包括:需求分析、设计、编码、测试和维护。

从技术的角度,一个典型的软件系统分别包含若干个核心级和系统级的关注点。

核心级关注点是系统要完成的业务功能;系统级关注点是完成核心级关注点所必须的配套设施,这些配套设施通常就认为是整个系统的系统特性,或者是业务功能的功能约束。

2.4 横切关注点(crosscutting concern)理解横切关注点的好途径是用例子来说明。

考虑把统一建模语言(UML)用于简单的图编辑器(Figure Editor)。

如下图所示。

图1. 在图编辑器中方面模块、模块类模块示意图其中有两个具体的图元素:点和线。

在面向对象方法中,用类表示点和线,这些显露好的模块性,每个类的源代码是紧密相关(内聚),并且类之间有清楚和良好定义的接口。

但是如果再考虑这样一个关注点:图元素移动时要通知屏幕管理器Display,这就要求移动图元素的每个方法(method)要做通知。

图中每个方法必须实现这个关注点,即点和线框中每个方法要实现那些关注点。

注意,显示修改的框既不适合在其它框内也不适合环绕其它框,我们称这为横切关注点。

如果只使用面向对象程序设计方法,实现横切关注点就趋向于分散在系统各处,如图中所示。

但是,如果使用AOP机制,我们就可以在一个单个方面中,模块化显示修改行为的实现。

我们可以用一个单个模块单位实现这个显示修改行为,它使得我们容易把它作为一个单个程序设计单元来思考。

有了面向方面的程序设计语言机制,我们可以在设计级用方面来思考构建软件系统。

3需求规约(specification)与设计开发软件的重要原则之一是要分离各种关注点,这种关注点的分离,首先要体现在需求分析,对需求进行规约,然后针对需求规约进行设计。

前面已经提到,面向对象的分析与设计有局限性,引入aspect概念后,相应的规约和设计也要重新考虑。

Xerox 公司PARC 已设计开发Aspect J语言,它是基于Java语言的AOP扩展,既是一种规约语言,也是一种AOP的实现语言。

Aspect J使用Java语言实现单个关注点,并通过对Java进行扩展,提供了编织(weaving)规则。

4实现以扩充Java的实现方式为例,编织方式有3种:1.静态织入(编译时织入):借助预编译器对源代码进行增强,代表是Aspect J。

2.装载时织入:修改class loader,在加载class时对其进行二进制增强,代表是J BossAOP。

3.动态织入(运行时织入):利用Java动态代理(dynamic proxy)在运行时拦截方法调用,织入方面逻辑。

大多数AOP框架均以这种方式实现,灵活性强,且对被织入模块的侵入性较小。

代表有Nanning、Spring AOP等。

5展望自1997年首次在欧洲面向对象会议上提出AOP以来的7年间,全球已开展大量有关研究与开发工作,并自2002年起,每年春天分别在欧洲和美国轮流召开专门的面向方面软件开发(AOSD)国际学术会议。

第1届是2002年4月在荷兰Enschede召开,第2届是2003年3月在美国波士顿召开,第3届是2004年3 月在英国Lancaster召开,第4届将于2005年3月在美国芝加哥召开。

前三届的与会者包括美国、加拿大、荷兰、英国、法国、德国、比利时、瑞士、西班牙、爱尔兰、丹麦和日本、以色列等。

除了Xerox公司,美国IBM公司的纽约Watson研究中心,德国西门子公司和日本东芝公司等都投入研发,欧美和日本的许多大学也在进行研究,我国北京大学和西安电子科技大学的软件研究所也对AOP给以关注并开展了一些研究开发工作。

从近年的发展来看,研究开发AOP的角度很多,有的研究语言,有的研究规约和设计,有的研究实现,应用还比较少,只是为研究而做些实例试验。

但从各种刊物和会议上的报告交流来看,提出了许多问题,并对不少问题进行了深入的分析研究,有的已提出解决方案,并取得了初步成果。

面向对象方法技术从语言角度提出后,已在软件技术方面取得突破,并独树一帜,影响操作系统、数据库、编译和网络软件的研发。

现在AOP也有类似情况,已有人在研究其对操作系统、中间件等的研发作用,并已有一些文章发表。

预计AOP也会对软件技术发展产生影响,希望我国软件工作者能适当投入力量,关注和进行AOP的研发工作。

[1]Kicgales G,et al Aspect-Oriented Programming, In:Proc.of the European Conf .onObject-Oriented Programming (ECOOP),June 1997[2]曹东刚,梅宏.面向Aspect的程序设计——一种新的编程范型,计算机科学,2003 ,30(9),5—10[3]高海洋,陈平. AOP综述,计算机科学,2002,29(10),133—135[4]Elrad T等编,面向方面的程序设计专集,(共12篇文章),CACM,2001,44(10),28—97[5]1997年以来ECOOP会议录中有关AOP文章,参见LNCS,第1241,1445,1743,1964,2072,2374,2743,3086等卷,Springer,1997—2004[6]2002年以来AOSD会议录,可见ACM或AOSD网站:www. 或。

作者简介:程 虎男,1938年生,中国科学院软件所研究员,博士生导师,现任软件所总体部顾问及《中国计算机学会通讯》编委。

主要方向为计算机语言和编译系统的研究与开发和人工智能与神经网络的研究,还关注软件工程与信息技。

相关文档
最新文档