论文部分内容阅读
软件规模的不断扩大使得系统分析和设计变得日益复杂。软件开发中的许多关注点往往横切系统的多个模块,利用现有的编程技术(如面向过程编程、面向对象编程),这些横切关注点很难被鉴别、理解和模块化。典型的横切关注点包括设计约束和特征、体系质量以及系统级属性或行为,如事务处理、日志与错误恢复等。 面向方面编程(Aspect Oriented Programming,AOP)是一种全新的编程思想,由Xerox公司的帕罗阿尔托研究中心在1997年的欧洲面向对象编程大会(ECOOP)上首次被提出:2001年3月,首种支持AOP的语言AspectJ诞生。AOP被看作是标志软件设计和编写方法基础性转变的三大运动之一,并被《MIT技术评论》杂志评为21世纪十种对经济和人类生活工作方式最具影响力的技术之一。AOP从编程方法学的角度对横切关注点问题进行了有效的解决,并通过AOP语言提供的精确捕获横切关注点的机制,将那些分散的应用组织成单独模块,避免了由于横切现象带来的代码交织(code-tangling)以及与此相关的一系列问题,同时减少了由于重建软件项目而带来的代码改动,大大提高了系统的模块性和重用性。 随着AOP技术的日渐成熟,AO的思想已不再局限于编程层次,而是开始影响到软件开发的各个阶段,形成了面向方面软件开发(AOSD)技术。AOSD允许开发人员在系统分析、建模、编码、调试和维护的各个阶段,都可利用AO的思想进行处理。而在系统开发与设计的初始阶段就将问题分解为核心组件和方面组件,并将横切关注点模块化为独立的aspect,可使系统结构更加清晰,为下一个阶段的代码生成、系统维护等工作带来便利和保障。面向方面建模(AOM)是实现这一目的的有效手段。AOM利用建模语言(如UML)为系统进行基于AO的分析和表示,将使所设计的组件有更好的重用性,并使在更高水平区分关注点的AOP系统在自动代码生成上成为可能,并能保持需求、设计和实施间的连续性。正如rational公司官方网站指出:建模“提供了解决问题的结构,为探索多重解决方案提供了试验场地,提供抽象性来控制问题的复杂度,为商业问题的解决缩短了从开发到市场的时间,减少了开发投入,并使得错误风险可控”。现在,AOM已成为AOSD中重要的研究内容。 然而,目前AOP自身还并未提供正式的建模技术和建模工具,研究人员只是分别从建模语言、建模工具、建模方法以及建模思想等不同角度对AOM进行了研究。如Suzuki J等人开发了一种基于XML的aspect描述语言,用来在CASE开发工具与aspect联结器间进行信息交流;Clarke S等人利用UML模板,提出了一种用于在设计阶段处理横切需求的组件模式;Omar Aldawud等利用UML状态图和类图来为代表横切关注点的不同子模块进行建模和内部联结,该方法不需对UML进行扩展。但同时他们也提出了另一种通过对UML版类包(profile)进行扩展以支持AO建模的方法;Jean Marie Lions等人则对支持AOM的CASE工具进行了研究,提出了一种基于元模型的OpenTool技术,利用OTScript元语来扩展UML的属性和结构,以支持西南农业大学硕十学位论文中文摘要AO系统的建模。 目前,在AOM语言的选择上,通常选用支持面向对象的UML做为A0建模语言,因为A0是对oo技术的补充,自然地,人们可通过扩展UML来表达A0系统。 UML是一种用来指定、可视化、构建和记录软件系统的建模语言,它定义良好、易于表达、功能强大且普遍适用,被服G组织确定为面向对象的标准建模语言。然而,现实需求是多种多样的,作为在标准化符号要求和特定领域需求之间折衷的选择,UML被设计成一种可扩展的形式,即用户可通过引入特定领域的模型元素来扩展姗L,以适应其特定的需要,另一方面,这种引入的元素将象姗L标准元素一样使用,给不同用户间的交流带来了方便。这使得UML的作用域不仅局限于面向对象的分析与设计,还能适应于不同类型的系统、领域和方法。UML的这种扩展性也为利用它来表达AO系统提供了理论依据。实践上,目前的CASE卜具大多支持UML,以Rationai Rose为代表的建模工具更提供了丰富的扩展机制,允许用户按一定规则对UML元模型进行任意扩充,以表达特定的领域需求。这也为利用UML来表达AO系统的提供了实践基础。 本论文分析了AOP的核心思想和AOM的重要意义,并深入剖析了支持AOP思想的AspectJ语言的语法结构,探讨了UML语言的可扩展性,提出了一种以AspectJ语法为特征,通过扩展UML元模型来支持AspectJ系统建模的方法,分别为AspectJ语言中的aspect、pointcut禾1 advice等结构单元设计了姗L的表示方法和相应的表现方式。最后利用支持UML的CASE工具-一Rat ional Rose提供的扩展接口(REI)对该方法进行了验证,通过定制版类 (Stereotypes)、标签值(Tagged Values)和约束(eonstraints)实现T Ao模型的可视化和可辨别性,并通过编写的ScriPt脚本实现了对A0模型的自动代码生成功能。 本研究对于减小oo和AO设计工具间的鸿沟进行了有益的尝试。但由于目前缺乏统一的A0建模标准,该扩展方法仅是基于AspectJ语法概念,随着AOP思想研究的不断深入和AsPectJ语言的不断发展,新语法结构的不?