使用元数据设计模式的面向切面实现外文翻译资料

 2022-11-29 15:39:17

英语原文共 10 页,剩余内容已隐藏,支付完成后下载完整资料


使用元数据设计模式的面向切面实现

G. Alipour*1, A. B. Sangar2, M. H. Mogaddam3

1Department of Computer Engineering, Hashtrood Branch, Islamic Azad University, Hashtrood,

Iran

2Department of Computer Engineering, Urmia Branch, Islamic Azad University, Urmia, Iran

3Department of Computer Engineering, Hashtrood Branch, Islamic Azad University, Hashtrood,

Iran

摘要:计算机编程范式旨在提供更好的分离问题。面向切面编程通过使用切面管理横切问题来扩展面向对象编程。面向切面编程最为人诟病的地方是“主导签名的专制”和程序流程的可见性不足。以Java注解形式的元数据,是两个问题的解决方案。设计模式普遍被认为是面向对象设计的方法之一。它们帮助管理软件的复杂性,并且能够作为软件设计师们之间沟通的桥梁。为了证明新技术,这些属性引导了设计模式作为选择。成功的实现都有一个通用的解决方案:使用注解来配置和标记原型,而模式代码统一封装在某一切面里头。这将降低切面之间、键入签名以及代码库与特定AOP框架之间的耦合度。此外,它还提高了程序员对程序流程的意识。本文介绍了面向切面的编程和设计模式,提出了用java中注解工具作为减少面向切面编程耦合度和增加程序观察率的解决方案的好处。

关键词:面向切面编程;设计模式;面向对象编程;元数据

1 引言

软件系统开发在1968年被正式提出作为一个工程性的问题。面对这些问题,在此之后,人们做了许多相关研究来解决这个问题。这些解决方案主要集中在更好地分离软件系统,以及将其部分组成独立和直接的单元,如类和对象,这样的话,这些元素之间的关联度和耦合度就会变得更小。这种编程方法经常被用于程序的逻辑分析中。然而,人们实际开发中发现,在量化一些问题时,这种方法不利于发挥面向对象的好处。这些被人们称作为“横切”的关注点,包括切面编程,包含一个忽略其他关注点的方法。这些关注点,无论是在设计还是在应用中,一般来讲都不能与系统的其他部分明确分离,因为这样会导致偏离和复杂性问题。实际上,为了解决横切问题,面向切面编程只是实现了面向对象的程序,而不是将其作为OOP变成的替代的解决方案[1]。设计模式是软件设计中出现的一些问题的可重用的解决方案[2]。首先,这些模式被用作C 语言的架构概念,之后,“GOF”在1997年出版。设计模式通过引入新颖的解决方案来沟通软件设计者们。本文将深入讨论面向切面编程,然后在评估一些常用的设计模式之后,提出了一种解决方案来关联设计模式和面向切面编程。

面向切面编程

为了在软件应用程序中更好地描述和封装问题的方式,面向切面编程(AOP)观点被提出。面向对象编程(OOP)通过封装状态和动作的对象为此提供了一个很好的方法,然而这仅限于解决应用程序问题的领域,无法解决横切问题。通常的横切问题包括日志记录、身份验证和事务管理这三个问题。这些“切面”与应用程序的设计并无关系,而是“切入”它。目前的横切问题的通常的解决办法是将它们与核心逻辑代码进行交织。然而这种方法破坏了系统的模块化。为了解决这个问题,人们研究探讨了如何将横切问题与业务逻辑隔离开来,以非侵入式的方式进行。AOP编程思想是由G. Kiczales和他的团队在1990年代在Xerox PARC提出的。此外,他们开发了第一个也是最受欢迎的AOP语言,名为AspectJ,作为Java语言的扩展。然而,AOP编程并不受软件开发人员和架构师们的待见,可以说是“臭名昭著”,因为它使得系统变得越来越复杂,同时AOP编程无法适用于旧的应用。AOP并不是OOP的替代品,而是通过进一步分离关系来扩展它。

关注点分离

关注点是程序的需求,也是设计者优先考虑的地方,它可以影响不同的软件单元。关注点可包括必要和不必要的要求,如事件记录,效率等。此外,可以在安全问题或隐藏记忆的高低层次提出关注。基于参数的开发是生成复杂系统的广泛使用的方法。实际上,需求是用于类,对象和服务类型的参数,尽管有些需求不能用一个或多个参数表达。这种跨需求的切割被称为横切关注点。在计算机科学中,横切的关注点是切面的关注,而忽略其他关注点[3]。在设计或应用中,这些问题往往难以与系统的其他部分明确分离,并导致分散和复杂化。

面向切面编程

软件系统由各种关注点组成。横向关注分离试图降低这些关注之间的现有依赖关系,并将它们分开,以获得系统中的量化目标。这种分离行为适用于诸如面向对象编程之类的许多程序语言。但是,现有的程序语言不能分开横切关注点,为了支持切入问题,引入了分离面向切面的编程。因此,面向切面编程是一个典型的例子,用在所谓的切面,明确界定的问题之内分离问题和量化横切问题。面向切面编程完成了面向对象的编程,为横切问题提供一些解决方案。连接点,切点,通知和切面是通过此方法引入的新层定义的概念。它有助于将关注点集中到切面,并防止相应的代码分散。面向切面的编程收集了与关注点相关的所有数据,方法和类,并提供了以最佳方式将系统置于单独的组合中的功能。面向切面编程在1990年中期的PARC项目中被使用。它源于旨在代码量化和促进重用和保存的作品[4]。1997年,PARC公司的grigure kikzals先生和同事们提出了切面概念,并在OOPSIA会议上介绍[5]。小组不仅努力介绍面向切面的编程,还引入了一种称为AspectJ的语言,目的是为开发人员引入面向切面的编程方法。Olauph Spinch[6]引入了基于C 语言的AspectC 面向切面的编程语言。他创建Aspect C 规划语言,并在C 程序语言中添加了附件。

切面的概念

切面是一个程序的单元,旨在快速实现一个程序。它最初是防止横切操作代码分散的单元,并且通常被解释为横切结构。实际程序通常由是通过使用面向切面编程语言的类和切面组成的。通过类和切面的程序,可以看出,程序的量化发生在切面中:(1)通过类来执行基本操作,(2)横切关注的地方是通过切面进行的操作。因此,在实际的程序中,由于切面关注的是横切点,它与类是不同的。在面向切面的编程语言中,切面被独立进行编码,然后由其他系统成员将切面织入,以便制定预期的系统,如图1所示。从结构上讲,切面由两部分组成:通知和切入点。所谓通知指的就是指拦截到连接点之后要执行的代码。连接点是程序中可以添加一个切面的位置点。程序的一组连接点称为切点。事实上,切点决定了必须建立通知的点。关于切面有两个重要的地方:首先,一个切面不直接执行切入操作,而是使用独立的API。其次,和对象一样,切面是一种能够在各种规划语言中使用的抽象概念。

设计模式

新手们人们对设计模式有一个常见的误解,并且这个误解影响了很多刚刚学习软件的人们,他们认为设计模式是软件的基础架构。设计模式是目前许多的软件设计问题中OOP设计

图1 面向切面编程结构示意图

原则的体现。系统不是设计模式的组合,而是设计模式可以帮助解决系统设计中的问题。人们在考虑系统所适应的所有变化时都有一个很大的误区。为了适应系统的发展,必须创建一个便于更改的设计。这是通过封装方差并将其与不变的切面分开来实现的。差异只会在发生时造成有限的伤害。

单例模式

单例类型是单例模式的一个具体实现。通常情况下,一个单例类型只有一个实例,但它不是强制性的。它包含一个类型为单例类型的静态成员,命名为唯一实例,引用单个实例。全局接入点是静态方法实例。该方法检查是否已创建实例,如果没有创建一个实例,则返回对实例的引用。单例模式示意图如图2所示。

图2 单例模式示意图

观察者模式

观察者描述对象之间的一对多发布/订阅关系,一个对象在其状态改变时通知其他对象。观察者是由订阅通知的所有对象实现的接口。它包含一个更新方法,由发布者在更改其状态时调用。主题是由出版商实现的接口。它包含用于附加和分离订阅者的方法。当通知其观察者时,具体主题,主题实现将自身作为参数发送到更新方法。因此,具体观察者和观察者的实现使用其更新方法的参数将其状态与主题的新状态同步。

图3 观察者模式示意图

状态模式

状态显示当状态发生变化时对象可以如何更改其行为。上下文是改变其行为的对象。这通过将行为封装在几个对象中来实现,每个定义上下文的状态,并且每次只有一个处于活动状态。上下文委托给当前状态对象的所有接收到的请求。状态接口公开了一组与所有状态共同的操作,并由具体的状态对象来实现。

图4 状态模式示意图

代理模式

代理模式显示如何将一个对象隐藏在一个占位符或替代物后面,它与原始对象呈现相同的界面。代理模式用于完成不同的目标,尽管它具有或多或少相同的结构。作为迭代器,这种以动态代理的形式的模式在几乎所有的现代开发平台中都是无处不在。代理模式实现大量用于开发运行时组织AOP框架。通知的代码所在的所有对象都隐藏在代理人所在的代码的代理中。动态代理是为任何类类型创建代理的通用解决方案。代理模式具有灵活性,同时也带来了复杂性问题,拖慢速度问题和增加冗长度的问题, 因此开发人员有时需要编写自己的代理模式实现。

图5 代理模式示意图

面向切面编程,元数据和设计模式

AOP编程有两个问题需要给予说明:使得程序的流程缺乏可见性,并且让程序的调试更加困难,并且组成切点的构造使得程序与切面的耦合度大大增加,被认为是“主导签名的专制”[7]。对于这两个问题,一个常见的解决方案是使用JDK 1.5版本中引入的Java平台的元数据工具[8],即注解来标记需要建议的语言结构。注解以声明的方式,以提供信息为目的,来锈蚀Java语言结构。AspectJ从1.5版开始,提供了在切入点中使用注解的方法。这种方法提高了程序流程的可见性,并使开发人员免受“主导签名的专制”的负担。切面的类库可以附带自己的一套注解,以应用于要通知的语言结构。Java语言从版本1.5开始,接受多种语言结构的注解,如类,方法,方法参数,类属性和变量。不过其限制是在源码,类文件或运行状态时不能访问局部变量上的注解。因此,AspectJ不能拦截注解的局部变量。

2 结论

AOP是一个编程范例,AOP作为OOP的扩展,它允许封装横切关注点。与OOP带来了类,方法和属性的概念一样,AOP也自带了一套概念:切点,通知,引入和切面等概念。由于AOP的作用不是作为编程语言来使用,而是作为框架,为了使用切面,需要一个类似编译器的实体。这个实体名称为“aspectj weaver”,该过程被人们称为“织入”。织入者只是AOP框架组成部分的其中一员。另一个是用于表达AOP特定构造的特定语言。因此,为了对AOP框架进行分类,我们必须对这两个组件进行分析。根据织入发生的不同时间,可分为编译时织入,加载时织入和运行时织入。至于具体的语言,有很多的解决方案,例如使用XML文件的方式或语言扩展的方式等等。AspectJ是迄今为止最成功的AOP框架。它提供编译时期或者加载时期进行织入的可能性。AOP的具体语言是java编程语言的一个扩展。

设计模式是面向对象设计中常见问题的通用解决方案。“Gof”设计模式由于其应用的广泛性和多样性,在业界占据着经典地位。这些设计模式最重要的成就之一是在软件工程师之间创建一个公共的沟通桥梁。事实证明,“Gof”设计模式是已经成为催生新技术的正确的选择。AOP编程旨在扩展OOP编程,使得这些选择更加明显。AspectJ被选为提供面向切面的“Gof”5种设计模式的实现。

本文的目标是以Java注解的形式使用设计模式,AspectJ和元数据,作为反对两个最重要的AOP批评观点的解决方案的证明,即“主导签名的专制”观点和AOP让程序流程隐藏的观点。“主导签名的专制”指的是方法或类型签名与织入切面的紧密耦合。程序流程隐藏指的开发人员缺乏在何处织入切面和如何织入切面的具体信息。注解被用于标记通过结合设计模式逻辑的切面的连接点。结果得出以下相关结论:为了有效的实现一个AOP编程,模式相关代码应该横切代码执行成员在模式中的逻辑。大多数的“Gof”中的模式是通用解决方案(如外观模式和解释器模式等)或纯面向对象的解决方案。以下四种设计模式则提供使用AspectJ和注解的方式来有效的实现:单例模式,观察者模式,状态模式和代理模式。在这些模式的设计中有一个反复出现的主题:注解被用于标记和配置成员,而切面则保持模式的逻辑。通过使用注解,模式中涉及的类型与这些切面相结合。此外,用注解插入/拔出模式恢复到标记/不标记的类型。所有与模式相关的代码与参与者分离,具有较高的一般性。另一个重要的成就是减少与特定AOP框架的耦合。

参考文献:

[1] S. Vijay, and A. Shetty, 'A Study on Different Approaches Towards Aspect-oriented Requirements Engineering,' Indian Journal of Computer Science and Engineering, 2011, 2(4), 407- 419.

[2] Sampaio,

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[25752],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。