面向方面软件开发研究

计算机应用研究 2005 年
面向方面软件开发研究
郭东亮, 张立臣(广东工业大学计算机学院, 广东广州510090)
摘 要: 系统的某些关注点横切整个系统,无法很好地封装在单个模块里,造成代码混乱和弥散,用面向方面编程AOP 可以解决这些问题。首先介绍了现代软件开发方法及其产生的问题;其次,阐述了AOP 的基本概念,并结合AspectC ++ 演示了如何进行面向方面的编程;再次,描述了如何对UML 扩展以支持对方面建模;然后介绍了面向方面软件开发在实时系统中的应用;最后给出了结论和未来的主要工作。
关键词: 面向方面编程; AspectC ++; UML; 实时系统
中图法分类号: TP311    文献标识码:A    文章编号: 100123695 (2005) 0820036203
Research ofAspect2Oriented Software Development GUO Dong2liang, ZHANGLi2chen(School of Computer, Guangdong University of Technology, Guangzhou Guangdong 510090, China)
Abstract: Someconcernscrosscutallthesystem,whichcannotbeencapsulatedinamoduleinamodularway, resultincode tangling and scattering. Aspect2OrientedProgramming(AOP)canmodularizecrosscuttingconcerns. Presentsmodernsoftware developmentmethodology and its shortage. Secondly this paper presents basic concepts of AOP, and demonstrates aspect2orientedprogrammingusingAspectC++. ThirdlyUMLextensionstomodelaspectsaredescribed. Fourthlythispaperover2views application ofAOSD in real2time systems. Finally conclusion and future focus are given.
Key words: AOP (Aspect2OrientedProgramming); AspectC++; UML; Real2time Systems


首先分析了当前的编程技术,然后提出了缺点,就是无法很好的处理关注点(concerns)
1.面向对象编程
对该方式进行了分析,指出了他的不足之处。无法处理横切多个不相关模块的行为。
2.面向方面编程
2.1 AOP的概念
先介绍了基于java和c++的面向方面的实现。
接着介绍了在AOP中出现的新概念:
(1)连接点(Join Point) 。它是组件代码中的方面可以干涉的点, 如一个函数、一个属性、一个类型(Class, Struct, Union) 。连接点是一个抽象的概念,不用显式定义一个连接点。
(2)切入点( Pointcut) 。它是由切入点表达式( Pointcut Expression)描述的一系列连接点。方面要在切入点影响组件代码的执行。切入点表达式由匹配表达式(用来发现一系列连接点) 、切入点函数(用来从切入点过滤出或映射特定的连接点)和逻辑用算符(用来结合切入点)组成。
(3)通知(Advice) 。当到达由切入点表达式指定的连接点时,Advice 指定要执行的代码。
(4)方面(Aspect) 。它是对类概念的扩展,以模块化方式实现了横切关注点。
(5) 编织器(Weaver) 。用来把方面中定义的代码以一定方式植入组件代码中,这样把非功能代码加入到功能代码中, 改变了系统的结构和行为。
接下来介绍了:用AOP 可以有效地解决代码混乱和分散的问题,AOP 目的就是清晰地分离关注点。下面介绍了AOP可以有效的实现组件和代码的分离(类似于.net中的组件和代码分离,我的理解)。
2.2  用AspectC ++ 编程
又简单的介绍,比较晦涩难懂,没有理解。
2.3 面向方面的建模
近年来,研究者开始考虑如何在软件开发过程中建模方面,这主要集中在如何扩展UML以支持对方面建模[6~8] 。
文献[6] 建议在UML 中加入两个新的元素,一个代表连接点的概念,用内部带有交叉线的圆表示,连接点的定义在圆的下方并括在中括号内,方面在连接点横切功能组件,这里的一个重要的建模考虑就是连接点在方面和组件包的外面;一个代表方面,用底部带有交叉线的框表示,并建议把方面的功能封装在一个UML 包中来维护关注点分离。
原文给出了图片,可以参考,对上面的说明感觉有些抽象,不是很理解。
文献[7] 在没有破坏当前UML 规格说明的情况下对UML 进行扩展,它加入了新的构造型(Stereotype) < < aspect > > 来定义方面, 并提出了基于XML 的方面描述语言(UML eX2 change Format, aspectextension,UML/a),支持开发工具与方面编织器之间的方面模型信息的交换。
文献[8] 提出了一个使用UML 表示的方面开发的方法学,也提出了一个方面约束语言(Aspect Constraint Language, ACL)来约束方面的使用,这样允许控制开发来避免出现不希望的后果。原文给出了图片,可以参考。
AUD (Application UnderDevelopment)实现系统的功能,一个UML 包定义AUD 为一个UML 模板,模板的参数为< class2 Name,methodName >, 模板参数由<< bind >> 下的(className, methodName)绑定。Aspect 为方面的定义,它包括Pointcuts 和Advice 。Aspect Implementation 和Aspect 关联,实现Aspect 。
文献[8] 的ACL 主要包括:限定Aspect 为Const, 不允许修改AUD 的结构和行为;限定Aspect 为Singleton, 使得这个As2 pect 仅有一个实例;
Aspect 和Advice 执行的时间限制( time2 Limit< time > 限制) ;Aspect 何时执行(Timing 限制) ; Aspect 在何处执行(Bind 限制) 。
此处主要介绍了几种不同的建模方式。
4 面向方面在实时系统中的应用
在实时系统和嵌入式系统中也建立了一些模型。
Aleksandra Tesanovic 等人[9] 提出了ACCORD (AspeCtual COmponent2based Real2time system Development)设计方法,也提出了一个RTCOM (Real2Time COmponent Model) 模型。使用ACCORD 开发实时系统的过程是:第一阶段把实时系统按功能和低耦合高内聚的要求分解为一系列的组件;第二阶段把实时系统分解为一系列的方面,方面横切组件和整个系统,这个阶段处理非功能需求和横切关注点;最后按RTCOM 实现组件和方
面。RTCOM 允许把方面编织到组件里,包括三部分,即功能部分、运行时系统依赖部分和组合部分。另外把方面分为三类,即应用程序方面、运行时方面和组合方面。
J iyong Park 等人[10] 把面向方面编程技术应用到实时操作系统开发上。因为在实时操作系统里有许多横切的特征,为了满足日益增长的对实时操作系统快速定制的要求,需要面向方面编程技术,这里把函数看成一系列的基本块,基本块的功能代码可由不同的方面提供,这样横切了函数,且这些基本块可视,提供了图形表示的开发框架;支持类的组装,不同方面里的相同的类可以组成一个大类。
文献[11 ] 展示了如何把面向方面技术应用的分布式实时系统上。分布式实时系统中的非功能需求可以用方面来表达, 本文给出了一个把分布性、时间要求和容错方面加入到一个简单的日志组件中的方法。
该节介绍了三个模型,可以参考!
5 结论
AOP 是一个新的开发方式,因为它可以模块化横切关注点,这样避免了代码混乱和弥散,很好地控制了软件开发的复杂度,提高了软件的重用性和可维护性。现在已受到学术界和产业界的关注。GradyBooch 预言AOP 将崛起[12] 。目前已经展开对面向方面软件开发的研究,但是还不完善,未来的工作将主要解决以下问题:
(1)方面编织器的开发和方面编织器与开发环境的整合。
(2)如何有效地分离横切关注点。
(3)对方面开发的建模,主要集中在如何对UML 进行扩展。
(4)对方面使用的约束,这样以可控的方式使用方面。
(5)如何在需求分析和体系结构设计阶段管理方面。
参考文献:
[1]G Kiczales, J Lamping, A Mendhekar, et al. Aspect2Oriented Pro2 gramming[C]. Proceedings of European Conference on Object2Orien2 ted Programming, 1997.
[2]GregorKiczales, ErikHilsdale, JimHugunin, et al. An Overview of AspectJ[M]. Proc. of ECOOP,Springer2Verlag , 2001.
[3]OlafSpinczyk, AndreasGal, et al. AspectC ++: An Aspect2Orien2 tedExtension toC++[C]. Sydney, Australia: Proceedingsofthe 40th InternationalConferenceonTechnologyofObject2Oriented Lan2 guages and Systems (TOOLS Pacific 2002) , 2002.
[4]Olaf Spinczyk, Pure2systems GmbH. AspectC++ Language Refer2 ence[ EB /OL ]. http: / /www. aspectc. com /, 2003.
[5]Olaf Spinczyk, Pure2systems GmbH. AspectC++ aC++ Compiler Manual[ EB /OL ]. http: / /www. aspectc. com /, 2003.
[6]Mark Basch, Arturo Sanchez. Incorporating Aspects into the UML [C]. Workshopatthe2ndInternationalConferenceonAspect2Oriented Software Development, Boston, Mass. , 2003.
[7]JunichiSuzuki, YoshikazuYamamoto. ExendingUMLwithAspects: Aspect Support in the Design Phase [ C ]. The 3rd Aspect2Oriented Programming(AOP) Workshop at ECOOP,1999.
[8]Naomi Sapir, Shmuel Tyszberowicz, Amiram Yehudai. Extending UMLwithAspectUsageConstraintsin theAnalysisandDesignPhases [C]. Aspect2Oriented Modeling with UML, 2002.
[9]Aleksandra Tesanovic, et al. Towards Aspectual Component2based
Development of Real2time Systems[C]. Tainan: Proceeding of the 9th International Conference on Real2time and Embedded Computing Sys2 tems and Applications (RTCSA 2003) , 2003.
[10] Jiyong Park,Seongsoo Hong. Customizing Real2time Operating Sys2 temswith Aspect2OrientedProgrammingFramework[C]. SOCDesign Conference, 2003. 9662970.
[11 ] Andreas Gal,et al. On Aspect2Orientation in Distributed Real2time Dependable Systems[C]. Proceedings of the 7th IEEE International Workshop on Object2Oriented Real2timeDependable Systems(WORDS 2002), SanDiego,CA, 2002.
[ 12 ] Grady Booch.Grady Booch 预言软件开发的未来[ EB /OL ]. http: / /www2900. ibm.
com/developerworks/cn/rational/r2interview/, 2004.



 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

superdont

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值