APP下载

面向方面的UML建模方法及应用

2010-09-11

红河学院学报 2010年4期
关键词:类图关注点代码

余 强

(安徽水利水电职业技术学院,安徽合肥231603)

面向方面的UML建模方法及应用

余 强

(安徽水利水电职业技术学院,安徽合肥231603)

面向方面编程(Aspect-Oriented Programming,AOP)提供了一种描述和实现横切关注点的机制。分析面向方面软件设计原则与方法步骤后,利用统一建模语言(UML)对系统建模横切的关注点实现了分离和织入。最后通过一个实例来验证了这种方法能增强软件的模块性与重用性。

面向方面编程;面向方面建模;UML;网上书店

面向方面编程(AOP)[1]是1997年由施乐公司帕洛阿尔托研究中心开发的一种新的编程范型,它提供了一种明确捕获和模块化横切关注点的机制,有效解决了由于横切属性引起的代码分散和代码混乱等问题。AOP大都用在程序级和执行级实现横切关注点的模块化,AOP技术提供了一种在编程阶段实现关注点分离的有效有段。

AOP是一种新的编程范型,尚未提供正式的建模技术和建模工具,研究人员仅仅在建模语言、建模工具、建模方法以及建模思想等方面对其进行了研究。而统一建模语言(UML)可以描述软件开发中从需求分析直到实现和测试的全过程。AOP思想引入到软件开发的需求分析阶段实现模块化横切关注点的分离,并用UML的实现面向方面的系统类图和状态图,并对方面进行织入,完成系统建模的整个过程。

1 面向方面编程技术

1.1 面向方面编程的定义

面向方面编程(AOP),是一种基于关注分离的新技术,是建立在已有的如面向对象编程(OOP)和面向过程的程序设计方法之上的,AOP是对OOP的继承和发展,AOP增加了一些概念和结构用来模块化横切关注点,并能够自动将横切关注点植入到面向对象的软件系统中[2]。

在AOP中增加方面(Aspect)来封装横切关注点,目的就是清晰地分离关注点,解决代码混乱和分散的问题。面向方面的软件开发采用先进的技术来分离关注点,并强调分离和组合关注点。其目标是通过使系统的功能需求、非功能需求、平台特性等诸多不同的关注点相互独立,实现更好的模块化,构建易于理解、易于扩展、高复用性、高质量的软件系统。

1.2 面向方面编程中核心概念

面向方面编程的核心概念有:

1.方面(Aspect):所谓的Aspect,从抽象意义上讲,是对系统组件的性能和语法产生一定的影响的一些属性[3];从设计上讲,是横切系统的一些软件系统关注点;从实现上讲,Aspect是一种程序结构单元,它支持将横切系统的关注点封装到单独的模块单位中[4],典型的Aspect应用情况如系统异常和出错处理、同步和并发控制、内存访问模式以及特定于应用的程序关注点等。

2.连接点(joinpoint):是代码中激活advice被执行的触发点,是在程序执行过程中明确定义的某个执行点,在这些点中执行Aspect的代码。

3.切点(pointcut):是捕捉连接点的结构,用来指明所需连接的程序结构,是advice的激发条件,同时还为连接点上执行的通知提供上下文环境。

4.通知(advice):定义了方面的实现,比如日志写入的实际代码,或者是安全检查的实际代码。也就是说,通知是指在定义好的切入点处,所要执行的程序代码。通知包含自身的一组规则,这组规则规定了何时调用通知,这是与被触发的连接点相关的。通知分为“before”、“after”等[5]。

5.织入(wave):以自动化的方式把方面代码组织到业务核心代码的相关类中,形成最后完整的程序的过程称为织入。

2 面向方面软件设计

2.1 面向方面软件设计原则

面向方面软件设计遵循的原则有:

1.方面(Aspect)描述模块应具有通用性;

2.方面(Aspect)描述模块应与现行程序模块具有兼容性;

3.方面(Aspect)描述模块应具有可扩展性。

2.2 面向方面编程开发步骤

AOP采用一种松散耦合的方式来实现独立的关注点,然后再组合这些实现,建立最终的系统。采用AOP所建立的系统是由松散耦合的、模块化实现的横切关注点来搭建的,基于AOP的软件开发方式包括3个清晰的步骤[6],如图1所示:

图1 面向方面开发步骤

1.Aspect分解:分解需求提取出一般关注点和横切关注点,即将一个系统的核心模块关注点和横切关注点分离开来。

2.关注点实现:对于核心关注点,采用面向对象技术来实现;而对于横切关注点,将采用AOP技术。

3.Aspect重新组合:Aspect织入器通过创建的Aspect来指定重组的规则,该规则规定了实现的Aspect如何与OOP实现基础。

2.3 面向方面的UML建模方法

面向方面建模的目的是用图形方式显示出包括方面的整体结构,并且具有详细的语义定义说明。面向方面建模方法分两个阶段完成,首先需将方面抽取出来进行单独的分析与设计,然后按照织入规则将方面织入到原型中并与其它模块组件紧密结合[7]。

对于关注点的分离,在UML中,可将方面定义为一个方面类,用{Aspect}表示。{Aspect}中由方面名与操作组成,其中操作必须包含切入操作:{pointcut} pointcut(),{advice}advice(),也可包含其他功能操作,如读、写等。方面类是扩充的方面UML中的类,是UML的事物构造模块中结构事物的一个基本元素,建模时方面类的使用方法与基本类相似。

织入阶段的主要任务是分析关注点与方面的特性,识别出合适的切入点,然后在根据织入规则通知机制将方面切入到原模型中。在用例图中,方面可以作为用例图中的一个扩展用例加入织入其中,扩展点不是被真正插入到基础用例的事件流中,而是被添加到事件流顶部的外罩。扩展的方面用例也可以有前置条件和后置条件。必须满足前置条件,否则不执行横切操作,后置条件在方面执行后约束系统的状态。切入点相当于方面中的联结点。

方面的织入是UML的事物构造中行为构造的一个基本元素,表示在特定上下文中方面类与基本类或方面类之间,为达到某一目的而进行的一系列消息交换而组成的动作。这些动作是动态进行的,表示模型随时间环境等条件的改变不断变化,从而实现了动态建模,提高了系统在设计阶段的仿真能力并为软件实现阶段提供了可靠的支撑依据。

3 面向方面的UML建模实例分析

该实例是一个网上书店系统,利用UML进行建模。由于书店店主要了解本书店书籍的销售情况以及退书原因,以便书店主对销售书籍品种的及时改进和调整。

网上书店系统中涉及有客户类、订单类、书店类、书籍类、仓库类等。客户要了解订单状态,从而了解购买活动所处的状态;书商根据客户订单情况,进行订单的确认,然后根据用户付款信息通知仓库备货送货;仓库根据订单执行状态,决定是送货还是积极备货。在订单查询系统中,客户类、订单类、书店类、书籍类、仓库类中都包含跟踪trace()操作,追踪订单的运行状态。

图2 网上书店面向对象的类图

面向对象的类图2中,在客户类、订单类、书店类和仓库类中均要进行描述,出现大量的重复代码,效率下降,影响程序的效率。如果要对trace()进行修改,工作量也是极大的。在这种情况下必须利用AOP技术中的方面构建来描述,对横切关注点进行分离,经分离后的跟踪放到trace()操作中,并单独写为如下代码形式:Public aspect trace{

……

before():execution(**.*(..))

{Trace.write();}

after():execution(**.*(..))}

Trace.free();

……

} 然后在订单适当的时候切入到系统中,这样可以大大减少修改的工作量、另外也减少了代码重复行、达到高复用的代码,也便于对代码运行效率的提高。

图3 网上书店面向方面的类图

面向方面编程中不但要把方面从系统中分离出来,另外也必须使用新的方法将方面重新织入系统。图3网上书店面向方面的类图中,将追踪分离出来构造了一个追踪方面,建立了一比较完整的追踪模型来建模系统中的追踪事件,从而提高了改事件的可重用性。

图4 面向方面的系统活动图

接下来是如何是将方面织入系统中,实现完整性,在如图4面向方面的系统活动图中,按照aspect (trace)描述的机制,在创建订单将订单Aspect(trace)方面织入系统中。当系统创建订单时,追踪使用写操作记录下订单的一些必要信息,系统进行订单核对和商品检查后,回复客户(接受订单或拒绝订单),此时追踪也必须记录此信息,当回复完成后,追踪执行free()操作。

4 结论

本文介绍了面向方面编程的原理、方法和步骤的基础上,利用UML技术实现方面建模。结合网上书店订单查询系统实例,在面向对象的类图基础上,引入方面trace,构建了面向方面的网上书店类图,并用系统活动图反映出方面的织入机制。AOP中增加方面(Aspect)来封装横切关注点,达到清晰地分离关注点,解决了代码混乱和分散的问题,实现更好的模块化,构建易于理解、易于扩展、高复用性、高质量的软件系统。

参考文献:

[1]Kiczales G,Lamping J,Mendhekar A Macda G,Lapes B, Longtier J M,Ir min J.Aspect-oriented romramming,Proceeding of ECOOP’97(springer verlag,1997).

[2]周屹,郁哲.一种基于AOP和UML的用例扩展关系建模方法[J].黑龙江工程学院学报,2009,23(1):51.

[3]The Aspect J team.Aspect-Oriented Programming with AspectJ.Available at:http://aspect.org.

[4]Joseph D.Gradecki,NicholasLesiecki.面向方面的Java编程指南[M].北京:清华大学出版社,2005.

[5]黄兴华,胡飞.AOP技术在面向用户的软件组件测试中的应用[J].计算机应用与软件,2009,26(8):126.

[6]马欣,杨连贺.面向方面编程技术的研究[J].仪器仪表用户,2009,16(2):72-73.

[7]李婷,刘建勋,尹雁青.面向方面建模方法的研究及其应用[J].计算机技术与发展,2009,19(1):113-115.

[责任编辑 姜仁达]

Face aspect UML modelling method and application

YU Q iang
(Anhui Technical College ofWater ResourcesAnd Hydroelecric Power,Hefei 231603,China)

AbstractAspect-oriented programming(AOP)Provides a description and i mplementation mechanis ms for crosscutting concerns.Analysis of aspect-oriented software design principles and methods of procedure,the use ofUnifiedModelingLanguage(UML)on modeling crosscutting concerns to achieve a separation and weaving.,Finally,an example to validate thismethod enhances software modularity and reuse.

aspect-oriented programming;aspect-oriented modeling;UML;Online Bookstore

book=8,ebook=165

TP31 文献标码:A

1008-9128(2010)04-0059-04

2010-05-13

余强(1973-),男,安徽岳西人,讲师,硕士。研究方向:信息系统与电子商务。

猜你喜欢

类图关注点代码
冬奥关注点
寻找关注点 提高复习效率——以初中教学中“0”为关注点为例
基于语义和结构的UML类图的检索
下半年尿素市场四大关注点
如何分析一组数据的集中和分散——数据分析的两个关注点
创世代码
创世代码
创世代码
创世代码
UML类图元模型基于描述逻辑的表示及验证