论文部分内容阅读
随着软件系统规模和复杂性的不断增加,系统各个组件之间的相互影响变得越来越复杂。这些相互影响会限制软件的重用性和适应性,并使验证系统的逻辑正确性变得很困难。传统的软件开发方法已经难以从根本上解决由于系统复杂度的提高而带来的代码混乱和代码纠缠问题。面向方面的程序设计(AOP,Aspect-Oriented Programming)正是针对这种实际情况被提出的,并已成为继面向对象技术之后新的软件开发的研究方向。本文在对面向方面技术进行了深入分析的基础上,对面向方面技术的各个方面进行了系统的研究。比较了不同的软件开发模型对于系统耦合度的影响。针对AOP的织入过程,结合进程代数模型研究了其有效性和等价性。提出并实现了一种基于组件的面向方面的编程框架。耦合度是衡量一个软件系统可维护性、可重用性和可扩展性的标准。面向方面的系统是面向对象系统的扩展,在对面向对象系统耦合度评估方法研究的基础上,本文提出了一种AOS系统耦合度的评估方法并比较了不同软件开发模型下的系统的耦合度。首先对AOS系统进行了形式化的描述,定义了aspect和class之间不同种类的依赖关系,然后提出了耦合度评估框架,给出了AOS系统耦合度评估方法,并讨论了耦合度评估方法的数学特性,着重研究的是aspect和class之间的依赖关系对AOS系统耦合度的影响。最后针对不同的软件系统模型,比较其耦合度关系,指出AOP技术在降低系统耦合度方面的有效性和正确性。针对目前关于AOP的形式化验证研究的不足,本文在AOP织入过程的等价性和有效性问题上做了形式化的研究。对进程代数模型PAL(Process ALgebraic)作了AOP方面的扩充,抽象出面向方面编程元素和进程的数学描述,利用进程代数理论中较为成熟的标记和丰富的文法来研究aspect在程序等价和织入算法正确性上的问题,从软件科学的角度验证了AOP织入过程的有效性和等价性。在现有的AOP实现技术中,一般通过创建aspect库或者创建专用aspect语言来完成面向方面的编程。本文提出并实现了一种基于组件的面向方面的编程框架AOPF(Aspect-Oriented Programming Framework),该框架既保留了语言本身的特性又提供了对aspect库的支持。框架定义了C++在AOP方面的语言扩展ADL(aspect definition language),用于描述并实现AOP的编程元素,包括切入点(pointcut)、连接点(join point)和通知(advice),通过划分方面(aspect)来提取横切关注点(crosscutting concerns),并由编织器(weaver)将横切关注点织入到软件系统当中,从而实现横切关注点的模块化。AOPF提供两个层次上的AOP编程:自定义层和可配置层。在自定义层中,由编程人员自行定义AOP元素添加到代码中,增强框架的可适应性;在可配置层中,编程人员可以通过配置文件使用预先实现了的通用aspect组件,这些aspect组件将会被编织到代码中完成相应的功能,以期更好的实现代码模块化和重用性。本文所做出的新贡献如下:1.在研究OOP系统耦合度度量的基础上,针对aspect特性,提出一种AOS系统耦合度的评估方法,为证明AOP技术的有效性提供了依据。2.扩展了进程代数模型PAL,对AOP织入过程进行了形式化描述和验证,丰富了AOP理论证明方面的研究。3.提出了面向方面的程序设计框架AOPF,该框架不仅保留了语言本身的各种特性又提供了语言级别的对aspect的支持,并能把特定领域的aspect扩展作为通用组件加入。其优点在于C++源代码无须做出任何改动即可增加横切关注点功能,具有很强的适用性。4.在Linux操作系统上实现了AOPF框架,验证了所提出框架的可行性和有效性。