(计算机应用技术专业论文)面向方面建模及编织工具的研究与实现.pdf_第1页
(计算机应用技术专业论文)面向方面建模及编织工具的研究与实现.pdf_第2页
(计算机应用技术专业论文)面向方面建模及编织工具的研究与实现.pdf_第3页
(计算机应用技术专业论文)面向方面建模及编织工具的研究与实现.pdf_第4页
(计算机应用技术专业论文)面向方面建模及编织工具的研究与实现.pdf_第5页
已阅读5页,还剩64页未读 继续免费阅读

(计算机应用技术专业论文)面向方面建模及编织工具的研究与实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

! 坐奎兰堡主兰些堡苎 堕旦互耍鍪壁墨塑堡三墨墼旦塑兰壅墨 论文题目: 专业: 硕士生: 指导教师: 面向方面建模及编织工具的设计与实现 计算机应用技术 林燕霞 常会友教授 摘要 面向方面建模和编织是面向方面软件开发过程的两个重要且基本的课题。目前 面向方面建模存在的主要问题是缺乏一种与对象建模紧密关联且支持所有方面特征 的方面建模方法,编织技术存在的主要问题是每个编织工具只能适用于一定范围的 应用,且动态编织的性能有待提高。另外,建模与编织往往是割裂的,建模信息不 能立即反映给编织工具。 。 针对以上不足,本文在总结前人在这两个课题的研究成果的基础上,扩展u m l , 设计出能与对象建模紧密关联且支持大部分方面特征的方面建模方法,并扩展u x f 描述方面建模信息,使不同的开发工具得以共享方面建模信息。此外,本文还设计 了与之相应的基于j a v a 语言的动静态编织工具,支持方法、类、构件三个层次的编 织,并能根据系统需求配置可选功能。本文的方面建模方法提出把方面的基本属性 和与类( 构件) 相关联的属性分离,用名为a s p e c t 的类构造型表示只含基本属性的 方面,用扩展的u m l 元模型r e l a t i o n s h i p 表示方面与类( 构件) 的关联。扩展的 r e l a t i o n s h i p 命名为a s p e c t c o m p o s i t i o n ,用u m l 元模型的描述方法从语法、规则、 语义三个角度描述,定义了方面与类( 构件) 关联的可用连接点、规范、标记方式 等。动静态编织工具的静态编织作用在源代码上,动态编织作用在运行时。基于运 行性能的考虑,本文的动态编织使用基于代理的方式,分析了动态编织器的核心功 能和可选功能,设计出能根据系统需求配置的动态编织器,并给出了动静态编织工 具的设计和实现。为验证方面建模方法及其编织工具的可用性,在可重构e r p 系统 中,本人用这套方法对参数检测和数据源重定位两种横切关注点进行设计。最后, 从理论和应用上对这套方法进行了评价。 关键词:面向方面建模,编织工具,u m l 元模型,u m l 交换格式 中山大学硕士毕业论文 面向方面建模及编织工具的研究与实现 t i t l e :r e s e a r c ha n di m p l e m e n t a t i o no f a s p e c t - o r i e n t e dm o d e l i n ga n dw e a v e r m a j o r :c o m p u t e ra p p l i c a t i o nt e c h n o l o g y m a s t e r :l i ny a n x i a s u p e r v i s o r :p r o f e s s o rc h a n gh u i y o u a b s t r a c t a s p e c t - o r i e n t e dm o d e l i n g ( a o m ) a n dw e a v i n ga r el w oo ft h ei m p o r t a n ta n db a s i c s u b j e c t si na s p e c t o r i e n t e ds o f t w a r ed e v e l o p m e n t a tp r e s e n t , t h em a i np r o b l e m e x i s t e d i l la o mi st h e r el a c k sas e to fa s p e c tm o d e l i n gm e t h o dw h i c hc o o p e r a t e sw i t ho b j e c t m o d e l i n gt i g h t l ya n ds u p p o r t sa l lt h ea s p e c tf e a t u r e s t h em a i np r o b l e me x i s t e di n w e a v i n gi st h a te a c hw e a v e rc a l ls u i to n l yal i m i t e ds c o p eo fa p p l i c a t i o n s a n ds t i l l , m o d e l i n ga l w a y ss e p a r a t e sw i t hw e a v i n g ,s om o d e l i n gi n f o r m a t i o nc a n n o tf e e db a c kt o w e a v e ri m m e d i a t e l y t os o l v et h e s ed e f i c i e n c i e s ,t h i sa r t i c l ef i r s ts u m m a r i z e st h ec u f f e n tr e s e a r c h ,a n d t h e np r o p o s e sas e to fa s p e c tm o d e l i n gm e t h o db ye x t e n d i n gu m l ,w h i c hc a l lc o o p e r a t e w i t ho b j e c tm o d e l i n gt i g h t l ya n ds u p p o r tm o s to ft h ea s p e c tf e a t u r e s u x fi se x t e n d e dt o d e s c r i b et h em o d e l i n gi n f o r m a t i o n ,s ot h a td i f f e r e n td e v e l o p m e n tt o o l sc a ns h a r e i t m o r e o v e r , aw e a v e rb a s e do nj a v ai sd e v e l o p e d i ts u p p o r t ss t a t i ca n dd y n a m i cw e a v i n g , c a na p p l yt oo p e r a t i o n s ,c l a s s e sa n dc o m p o n e n t s a l s o ,i tc a nc o n f i g u r eo p t i o n a lf u n c t i o n s a c c o r d i n gt ot h es y s t e mr e q u i r e m e n t o u ra s p e c tm o d e l i n gm e t h o ds e p a r a t e st h ec o m m o n a t t r i b u t e sa n da s s o c i a t e da t t r i b u t e so fa na s p e c t t h ea s p e c tw i t hc o m m o na t t r i b u t e si s d e n o t e dw i t hac l a s ss t e r e o t y p en a m e da s p e c t , w h i l et h ea s s o c i a t e da t t r i b u t e sa r ed e n o t e d w i t ht h ee x t e n s i o no fr e l a t i o n s h i pn a m e da s p e c t c o m p o s i t i o n a s p e c t c o m p o s i t i o ni s d e s c r i b e du s i n gt h ev i e w s :a b s t r a c ts y n t a x ,w e l l - f o r m e d n e s sr u l e s ,s e m a n t i c s ,d e f i n i n gt h e u s a b l ej o i np o i n t s ,s p e c i f i c a t i o n ,e t c s t a t i cw e a v e ro p e r a t e so ns o u r c ec o d e s ,a n d d y n a m i cw e a v e ro p e r a t e so na mt i m e c o n s i d e r i n gt h en l nt i m ep e r f o r m a n c e ,d y n a m i c w e a v e rr i s e sp r o x y - b a s e da p p r o a c h t h i sa r t i c l ea n a l y s e st h ec o r ef u n c t i o n sa n do p t i o n a l f u n c t i o n so fad y n a m i cw e a v e r ,a n dp r o p o s e sac o n f i g u r a b l ew e a v e lt op r o v ei t s a v a i l a b i l i t y , t h i ss e to fm e t h o di sa p p l i e dt oar e r pp r o j e c to np a r a m e t e r d e t e c t i o na n d d a t as o n r c er e l o c a t i o n a tl a s t , t h i sm e t h o di sa s s e s s e di nt h e o r ya sw e l la si np r a c t i c e k e yw o r d s :a s p e c t - o r i e n t e dm o d e l i n g ,w e a v e r , u m lm e t a m o d e l ,u x f 1 1 研究背景 第1 章引言 1 9 9 7 年,g m g o rk i c z a l e s 在x e r o xp a r c 上首次提出了面向方面编程 ( a s p e c t o r i e n t e dp r o g r a m m i n g ,a o p ) 【”。a o p 的提出,作为面向对象编程 ( o j b e c t - o f i e n t e dp r o g r a m m i n g ) 的有力补充,有效地实现了系统横向关注点的分离。 面向方面思想提出之初,主要用于软件开发的代码阶段,用于解决某一特定的 子问题。由于面向方面方法在处理关注点分离上的优势,有必要在软件开发的早期 就识别出系统的横切需求,因此,业界提出了面向方面软件开发过程 ( a s p e c t - o r i e n t e ds o f t w a r ed e v e l o p m e n t ,a o s d ) 。a o s d 的主要思想是在软件开发 的早期需求和架构设计阶段就对横切关注点进行分离,并把面向方面的思 想和方法应用于软件开发的各个阶段。 目前,a o s d 的研究遍布软件开发的各个阶段,如eb a n i a s s a d 等设计的 t h e m e d o c 方法,用于在系统需求中识别方面1 2 】:gs o u s a 和ss o a r c s 等提出的采用 用况驱动的方法在需求设计阶段分离横切关注点 3 1 ;hf a k i h 和nb o u m q a d i 等提出 把a o s d 和c b s d ( c o m p o n e n t - b a s e ds o f t w a r ed e v e l o p m e n t ,基于构件的软件开发 过程) 整合起来1 4 1 。a o s d 的应用也遍布各个领域,如数据库加密( gb o s t r o m ) 5 1 , 软件变更检测( pf a l c a r i n 等) 1 6 1 ,用方面封装持久性( ar a s h i d 等) 1 7 1 。在众多的 研究中,面向方面建模和编织技术是其中两大重要且基本的课题,不少学者都分别 对这两个课题进行了研究。面向方面建模与面向对象建模是同时进行的,因此面向 方面建模的研究主要立足于扩展u m l ,有用u m l 符号表示a s p e c t j 的概念的1 8 】, 有设计新元素表示方面和连接点的1 9 j ,有扩展u m l 用于面向主题建模的【1 0 】。编织 技术分为两大类:静态编织和动态编织,动态编织方法又分为三种【1 1 】:基于代理 ( p r o x y - b a s e d ) 、基于解释程序( i n t e r p r e t e r - b a s e d ) 、直接操纵二进制码( b i n a r yc o d e m a n i p u l a t i o n ) 。不同的编织方法在灵活性、运行性能、a o p 特征的支持上都有所不 同。目前面向方面建模存在的主要问题是缺乏一种与对象( 或构件) 建模紧密关联 中山大学硕士毕业论文面向方面建模及编织工具的研究与实现 且支持所有方面特征的方面建模方法,编织技术存在的主要问题是每个编织工具只 能适用于定范围的应用,且动态编织的性能有待提高。另外,建模与编织往往是 割裂的,建模信息不能立即反映给编织工具。 1 2 本文的研究工作和意义 针对当前方面建模和编织工具存在的不足,本文在总结前人在这两个课题的研 究成果的基础上,扩展u m l ,设计出能与对象和构件建模紧密关联且支持大部分方 面特征的方面建模方法,并扩展u x f ( u m l e x c h a n g ef o r m a t ) 描述方面建模信息, 使不同的开发工具得以共享方面建模信息。此外,本文还设计了与之相应的基于j a v a 语言的动静态编织工具,支持方法、类、构件三个层次的编织,并能根据系统需求 配置可选功能。本文的方面建模方法提出把方面的基本属性( 域成员、方法) 和与 类( 构件) 相关联的属性( 通知、横切点、类型间声明) 分离,用名为a s p e c t 的类 构造型表示只含基本属性的方面,用扩展的u m l 关联表示方面与类( 构件) 的关 联。扩展的u m l 关联命名为a s p e c t c o m p o s i t i o n ,用u m l 元模型的描述方法从语 法、规则、语义三个角度描述,定义了方面与类( 构件) 关联的可用连接点、规范、 标记方式等。动静态编织工具的静态编织作用在源代码上,动态编织作用在运行时。 基于运行性能的考虑,本文的动态编织使用基于代理的方式,分析了动态编织器的 核心功能和可选功能,设计出能根据系统需求配置的动态编织器。本文给出了动静 态编织工具的设计和实现。为验证方面建模方法及其编织工具的可用性,在可重构 e r p 系统中,本人用这套方法对参数检测和数据源重定位两种横切关注点进行设计。 最后,从理论和应用上对这套方法进行了评价。 本文采用u m l 自身的扩展机制构造型表示方面,用与u m l 元模型同样的 描述方法对a s p e c t c o m p o s i t i o n 进行描述,使面向方面建模与面向对象建模无缝融 合。方面被设计为独立的元素,通过a s p e c t c o m p o s i t i o n 与类( 构件) 关联,有利于 方面的重用。本文进一步扩展u x f 描述方面建模信息,使不同的开发工具( 如编织 工具) 得以共享方面建模信息。根据建模信息设计的编织工具可根据系统需求配置 可选功能,使编织工具能适应不同系统对性能、资源、方面特征支持的不同需求, 2 因此编织工具的应用范围较广。这套方法对面向方法技术在大型软件系统开发中的 广泛应用具有很重大的意义,能使软件的可读性、重用性、适应性和可扩展性得到 进一步提高。 本文讨论的概念包括方面、类和构件,为叙述方便,本文把类和构件统称为组 件。 1 3 本文的组织结构 本文共分为六章,主要介绍了扩展u m l 对方面的建模、编织工具的设计和实现、 建模方法及编织工具的应用和评价。除本章外,本文其余各章组织如下: 第二章是对面向方面技术研究的概述,介绍了面向方面的基本概念,概括了面 向方面技术的发展过程,总结了其研究与应用现状。 第三章到第五章是本论文的重点。 第三章是面向方面建模的设计,首先介绍了方面与u m l 元素的关系,然后给出 用类构造型封装方面的域和方法的设计,并从语法、规则、语义三个角度扩展 t h e m e u m l 的c o m p o s i t i o n r e l a t i o n s h i p 成为a s p e c t c o m p o s i t i o n ,用于关联方面与类 ( 构件) ,最后扩展u x f 对建模信息进行描述。 第四章是编织工具的设计和实现。文中先分析了动静态编织需要实现的功能, 设计了整个编织工具的框架,然后讨论了编织规则的类别和解决策略,最后给出具 体的实现方案。 第五章给出了方面建模方法与编织工具在一个实际项目“基于中小型制造业企 业的可重构e r p 系统”中的应用。 第六章总结全文,并从理论和实际应用两个角度对方面建模方法和编织工具进 行分析和评价。最后提出了进一步的研究工作。 中山大学硕士毕业论文 面向方面建模及编织工具的研究与实现 第2 章面向方面技术研究的概述 2 1 面向方面技术的发展过程 2 1 1 面向对象的不足 关注点分离一直是软件开发的一个重要目标和原则。面向对象方法在软件开发 中起了重大作用:它把概念模块化为对象,封装实现细节,减少了模块间的耦合度。 然而,随着软件系统规模和需求的不断增加,系统各个组件间的相互影响变得越来 越复杂。这些相互影响可能会限制软件的重用性、适应性,并使验证系统的设计和 正确性变得很困难l “i ,即使是以面向对象方法为主导设计方法的软件系统也不可避 免。研究表明,面向对象在处理关注点的完全分离上存在着不足。面向对象方法只 分离了软件系统的公共关注点( c o m m o na s p e c t s ) ( 即功能关注点) ,这是一个一维 模型。然而,在现实的软件系统中,尤其是并发式软件系统,关注点之间是一种多 维模型,除了相对集中的公共关注点,同时还存在横切于系统各组件的横切关注点 ( c r o s s c u t t i n ga s d c c b ) 。横切关注点散布在各个功能模块里,破坏了组件的模块化, 限制了软件的重用性,并使得源代码难以理解,可维护性降低,从而影响了系统的 质量。图2 - 1 显示的是一个充分使用面向对象方法设计的类的函数,图中阴影标记 的代码段实现了横切关注点( 在这里是日志登记) 。显然,横切关注点的代码穿插在 功能代码间,使得代码冗长难以理解。 5 中山大学硕士毕业论文面向方面建模及编织工具的研究与实现 p l 由l i cv o i d 妇矗r 凡r i d s ( h t f m m a c c t i n tt o a c c t i n ta n 均u n 日 、:j 芦l o g 1 0 9 d e b d 。t 哺n 靠r f m 出钉:a 盯。f r o m a c c t # + of r o m a 喊t - 。乜a c c t # 。+ t o a c c t + 。f o r r +j 量 裂| | m n t ) j _ 。 一j 。? _ _ + 弩曩 i f ( a u b l g r 性一如a c a 苎f 研n a c c t ) & & 器;? 。哆擘。堂一等警,磐? 即g ij 唾i 牛r 嘲蒸羔羔萋蒸 c u 蜘r a c a o u n t f r o m = f i n c l a c c o u n t ( f r o r n a c c t ) ; c u 曲m 俄c u n t b = f 讯d a c 埘1 心o c d 加 口r d 出i 副n o u n 崎j f # l 叩i 叼怡d a 蛔n 如而- 诂d e b j t a 。甜,+ 慕童l 鼍 :一、 f m m a c c t + 一f o r r + a m o u n t ) i ? ? i :瓤鬟i j 缸口e 击h 卸t u n t ) 3 i s 怄l o g d 口瞻恼日氧n b a n 采r f 叭岳c r e d 疗j i i 出_ l i 譬- 誓i ? ? 0 m 喊4 - - f o r j r + w 南h 篓。;。j 霉j ) e l ” ,、 5 w l o g 1 。g d e 协d 蚪s e 叫m v 删阿a c 瞄sd e 啦d - 知 ) 、矗 $ 归l o g i o g d e t a i l s ( t r a n s f e r f u n d se n d - f r o ma c c t # + 。 07 0 - - ,- 毒- f 。r f r o m a ”c c t + 。 i ”a 咖c c t # 。 + ? 譬+ j 囊:0 ,。雾 ) 图2 - 1 横切关注点与功能关注点 h 互穿捅( 摘1 3m m 开发者园地1 1 3 j ) 软件系统中常见的横切关注点有: 个性忧 日志记录,跟踪,优化和监控 事务的处理 性能的优化 持久化 代码的调试 6 应用系统的异常捕捉及处理 同步和并发处理 资源池,如数据库连接池的管理 系统统一的认证、权限管理等 针对具体行业应用的横切行为 中山大学硕士毕业论文面向方面建模及编织工具的研究与实现 2 1 2 面向方面的提出 针对面向对象方法的不足,为了更有效地分离软件系统中的关注点,1 9 9 7 年 g r e g o rk i c z a l e s 在x e r o xp a r c 上首次提出了a o p 。与其说a o p 是一种新的方法, 倒不如说它是o o p 的有力补充。a o p 用方面封装横切关注点,把其从系统的基本 功能模型中分离出来。这样很多类可以共享一个行为,一旦这个行为发生变化,不 必逐个类修改,只需要修改这个行为既可。 a o p 提出的新概念l ”l 【1 5 1 1 “l 【1 7 l 有: ( 1 ) 连接点( j o i np o i n t ) :程序运行流程中的一点,可以看成是在程序运行的 过程中发生的一个事件。典型的连接点有方法的调用、对象的初始化、域的读写、 异常处理的执行等。连接点是一个抽象的概念,不需显式定义。 ( 2 ) 切入点( p o i n t c u t ) :由切入点表达式描述的代表了具有某个或某些特征的 一系列连接点。切入点表达式由匹配表达式、切入点函数和逻辑用算符组成。 ( 3 ) 通知( a d v i c e ) :定义了当程序到达由切入点表达式指定的连接点时需要 执行的操作。通常有三种:b e f o r e 通知、a f t e r 通知和a r o u n d 通知,分别表示在连接 点之前、之后和代替连接点执行的操作。 ( 4 ) 类型问声明( i n t e r - t y p ed e c l a r a t i o n ) :指跨越类( 构件) 和它们的层次结 构的声明。类型间声明是编译时的静态操作。典型的类型间声明有定义类的成员方 法、定义类的域成员、定义类的继承关系、定义异常等。 ( 5 ) 方面( a s p e c t ) :对类概念的扩展,以模块化的方式封装了横切关注点。 方面由域成员、方法、通知、横切点、类型间声明组成。 ( 6 ) 编织( w e a v e ) :把方面代码插入到相应的连接点上。 2 1 3 面向方面的发展 面向方面思想从提出到现在已历经九年,其发展过程也从最初的用于软件开发 的代码阶段到现在的用于软件开发的各个阶段,也即是面向方面软件开发过程 a o s d 。a o s d 的主要思想是在软件开发的早期( 需求和架构设计阶段) 就对横切 中山大学硕士毕业论文面向方面建模及编织工具的研究与实现 关注点进行分离,在整个软件开发过程贯穿面向方面的思想和方法。 已有的关于a o s d 的研究和应用有: eb a n i a s s a d 等设计的t h e m e d o c 方法,用于在系统需求中识别方面( 2 l : 夺gs o u s a 和ss o a r e s 等提出的采用用况驱动的方法在需求设计阶段分离横切 夺 夺 夺 夺 厶 夺 关注点1 3 i : ag a r c i a 、cs a n t a n n a 等把设计模式用于面向方面建模上f 1 8 1 ; p a v g u s t i n o v 等人设计的一个可扩展的a s p e c t j 编译器【1 9 】: lc o l e 和pb o r b a 总结的面向方面编程的规律,这些规律对a s p e c t l 的重构 起着重要作用 2 0 l ; jh a n n e m a n n 等提出的基于角色的横切关注点重构方法【2 1 i ; l i - t ec h e n g 等用面向方面方法实现对已有应用系统的改进【纠: 此外,面向方面方法还被应用于数据库加密嘲、软件变更检测【6 】、软件产品 线的变更管理i 捌【卅、异常检测和处理瞄j 、e j b 事务处理和业务层模式应用 瞄】【2 7 】等。 2 2 面向方面建模的研究 面向方面建模( a s p e c t - o r i e n t e dm o d e l i n g ,a o m ) 是a o s d 的重要课题。在软 件开发过程中,方面的建模与对象的建模是同时进行的,因此,现有研究主要集中 在如何扩展u m l 以支持对方面建模。下文给出有代表性的几种方法的介绍。 文献脚i 在u m l 的基础上设计了针对a s p e c t l 的建模符号,a s p e c t j 中的每个抽 象概念( 连接点、切入点、通知、类型间声明和方面) ,都使用一种恰当的u m l 表 示法来表示( 见表2 1 ) : 袭2 - 1 文献【2 8 】1 | - a s p e c t j 的建模符号 a s p e c t j 抽象概念 u m l 表示法 a s p e c t j 抽象概念 u m l 表不法 连接点 l i n k s 类型间声明 t e m p l a t e s 切入点 名为 的 方面 名为 限j 类 操作构造型构造型 名为 的操 通知 作构造型 8 中山大学硕士毕业论文 面向方面建模及编织工具的研究与实现 图2 2 是用这种方式对方面建模的一个例子: q 缸自f 神- 1 0 h e r 哪口一 i 柚_ _ 肆h 一_ = 年盯v m l f b i 吐f 嘲i _ mf 曲- 酗一= l - o i m 削l m l - 呷d 瞳m b 即洫眦i 黯呼k 矗明样硝辄姆哦i ) _ _ bm v k :b , i 血l 对k 【靳硅叠d 日l h 雌;曲岫q 岫掌嘶l 。型_ 舳由血唧_ j 晨唑悝 ,瓣地! 蜘i 、一s 咖_ 三一翻_ h _ 嘀q 曲啊量妇p : - 刊揣 ,? 二童“m 衅l b _ - o 呐w i r i 、t 鼍翟) 、o 曩,啊譬, 、- - 一, 图2 - 2 一个n 咖向方面的设讨模型 文献【8 】也是利用u m l 的构造型来表示方面。它加入了 类构造型来定 义方面,并提出了基于x m l 的方面描述语言,支持开发工具与方面编织器之间的 方面模型信息的交换。 上述两种方面建模方法完全采用u m l 原有的表示法,充分利用u m l 构造型这 个扩展机制,对于熟悉u m l 的人而言容易理解且容易掌握,但它是针对a s p e c u 而设,因此应用很受限制。 文献【9 腱议在u m l 中加入两个新元素: 0 :代表连接点,连接点的定义在圆的下方并括在中括号内,方面在连接点 横切功能组件。 代表方面,并建议把方面的功能封装在一个u m l 包中来维护关注点分 离。 图2 - 3 是用这种方法建模的顺序图,它表示一个出售地产者把地产加入到代理 商的地产清单上来出售。 9 中山大学硕士毕业论文 面向方面建模及编织:r :具的研究与实现 图2 = 3 带有方面和连接点的顺序图 文献【9 】的方法能直观地表现方面的行为,但由于其增加了全新的元素,破坏了 u m l 的原有构造,又没有给出严格的定义,不利于方法的扩展和使用。 文献 2 9 1 提出了一个使用u m l 表示的方面开发的方法学,也提出了一个方面约 束语言( a s p e c tc o n s t r a i n tl a n g u a g e ,a c l ) 来约束方面的使用。a c l 主要包括: 限定a s p e c t 为c o n s t ,不允许修改a u d 的结构和行为;限定a s p e c t 为s i n g l e t o n ; a s p e c t 和a d v i c e 执行的时间限制( t i m e l i m i t 限制) :a s p e c t 何时执行( t i m i n g 隈制) ;a s p e c t 在何处执行( b i n d 限制) 。在这种方法中,a u d ( a p p l i c a t i o nu n d e r d e v e l o p m e n t ) 实现系统的功能,一个u m l 包定义a u d 为一个u m l 模板,模板参 数为 ,模板参数由 下的( c l a s s n a m e , m e t i l o d n a m e ) 绑定。a s p e c t 定义方面,包括p o i n t c u t s 和a d v i c e 。a s p e c ti m p l e m e n t a t i o n 和a s p e c t 关联,实现a s p e c t 。图2 _ 4 是使用这种方法的u m l 标记描述的方面模型。 1 0 中山大学硕士毕业论文面向方面建模及编织工具的研究与实现 图2 - 4 方回模型图 文献【1 0 】提出的t h e m e u m l 是c l a r k e 和w a l k e r 提出的用于面向主题 ( s u b j e c t - o r i e n t e d ) 的建模方法。在t h e m e u m l 中,一个s u b j e c t 用u m l 包的构 造型表示,方面s u b j e c t 用带参数的u m l 包表示,横切关注点与功能关注点的“编 织”方式在方面s u b j e c t 中以顺序图描述。方面s u b j e c t 与其他s u b j e c t 的组合关系称 为c o m p o s i t i o n r e l a t i o n s h i p ,它详细指定哪些元素、用什么方式( o v e r r i d e m e r g e ) 进行组合,在图示中用b i n d 1 表示。c o m p o s i t i o n r e l a t i o n s h i p 是扩展u m l 所得的元素。图2 - 5 是横切关注点t r a c e 的一个例予。 图2 - 5 t h c m e a j m l 的方面建模图 如上图所示,t r a c e d c l a s s 和t r a c e o o p ( 。) 均是参数,当方面t r a c e 与s 1 绑定时, 中l j j 大学硕= e 毕业论文 面向方面建模及编织工具的研究与实现 b i n d 操作将指定实参,实参是s 1 中一个具体类及其操作。在图2 5 _ c 中,若b i n d 的参数分别是x 、f o o o ,则表示图2 - 5 - b 中的一t r a c e d o p ( ) 将被类x 的f o o o , 在这里,切入点是t r a c e e n t r y ( s t r i n g ) 承lt r a c e e x i t ( s t f i n g ) 。 文献【1 0 】与文献 2 9 1 都使用了模板方法,这种方法具有一定的灵活性,但却不能 处理一些复杂的情况,如方面的类型间声明。 2 3 编织技术的研究与应用 编织是把方面代码插入到相应的连接点上。编织是a o p 的关键技术之一,方面 代码和已有程序代码编译或解释后要依赖编织器变成最终的可执行形式。编织技术 主要有两种,静态编织( s t a t i cw e a v i n g ) 和动态编织( d y n a m i cw e a v i n g ) 。静态编织 发生在编译阶段,动态编织发生在系统运行阶段。 2 3 1 静态编织技术 静态编织是指通过改变源代码的方式把方面代码插入到连接点处。编织的结果 是经过高度优化的代码,其执行效率可比拟没有使用方面的代码i 蚓。因此,静态编 织的好处就在于可防止面向方面编程的额外抽象层带来对性能的不良影响。早期的 编织工具( 如a s p e c t j 、a s p e c t c + + 等) ,采用的就是静态编织技术。 但静态编织缺乏灵活性。一方面它要求程序员在编译前必须把方面代码完成, 另一方面在编织后的代码中非常难以辨认出方面代码,因此,在运行时动态地调整 或替换方面代码将是一个耗时甚至不可能的事情。然而,在实际应用中,动态调整 或替换方面代码的需求是存在的,如有的实时系统启动后不允许停顿下来,因此当 有非功能性需求( 如负载平衡) 改变时,离线修改并重新编译部署变得不可行。因 此,动态编织技术应运而生。 2 3 2 动态编织技术 在动态编织中,方面代码可以动态地编织到连接点中:方面可以在运行时定义 中山大学硕:t 毕业论文 面向方面建模及编织工具的研究与实现 和生成,然后动态地插入到连接点中或者从连接点中删除m i 。动态编织的好处在于 它使系统具有更大的灵活性和可扩展性,也就是说,可避免重新编译、重新部署和 重房应用程序。 目前,很多编织工具( 如a s p e c t w e r k z 、d a oc + + 等) 都支持方面的动态编织 ( 见表2 - 2 ) 。f 埘 表2 - 2 常见的动态编织工具 编织工具支持的语言、t 开发者- ? ,_ _ 。- 一,j 。、特性一ii 、j 轻负荷、高性能、用x i v l l 表示方面、 a s p e a w e r k z j a v ab e a 公司 方面热部署、应用与j 2 e e 架构 a s p e c t c + + c + +m i c r o s o r与m i c r o s o f tv i s u a ls m d o 整合 a s p e c t l j a v ai b m支持一般性和注释 a j d tj a v ai b m 与e d i p s e 等j a v a 工具整合 a o p h pp h pc o a s t a lc a m l i n a 大学基于p h p 语言的 除了上表提到的编织工具外,众多的学者也对动态编织进行了研究探讨。在众 多的研究中,根据功能类( 封装功能关注点的对象类) 绑定到动态方面编织工具的 方式的不同,动态编织工具可分为三类1 3 2 1 :基于代理的,基于解释程序的,直接操 纵二进制码的。 d y n a m i c w e a v e r f r a m e w o r k ( d w f ) 1 3 3 1 是基于代理方式的一个典型例子。d w f 使用j a v a 反射机制的动态代理( d y n a m i cp r o x y ) 来实现运行时的动态调整。文献1 3 4 】 描述的面向方面框架( a s p e c t - o r i e n t e df i m n e w o r k ) 也是采用代理方式。在这种方式 中,代理用于拦截请求并转发到功能类:编织的功能由一个对象完成:所有方面注 册到某个对象,代理用此对象为功能类的每个方法评估( e v a l u a t e ) 方面。请求到达 时,被代理拦截,如果请求是创建一个方面,则代理首先检查该方面是否已在对象 上注册,如果没有,代理将调用方面工厂创建一个方面,然后将其注册到对象。如 果请求是方法调用,代理将调用对象来评估关联此调用的方面。基于代理方式的好 处主要在于方面的重用。但这种方式使用大量的设计模式( 抽象类和虚拟函数) ,因 此不适用于嵌入式系统。 在基于解释程序的方式中,标准解释程序被改造以建立一个插件式解释程序。 这种方式通常应用于j v m 上,因为在c + + 领域没有解释程序。解释程序被扩展, 用作检测运行时事件的发生。通知在这里被作为方法来应用。p r o s e p s i 和a x o n p 6 1 采 中山大学硕士毕业论文面向方面建模及编织工具的研究与实现 用的就是基于解释程序的方式。p r o s e 是对j v m 的一种扩展,能够在运行时拦截调 用( c a l l s ) 。它利用j v m 的调试接i :1 ( t h ej a v a v h t u a l m a c h i n e d e b u g g i n g i n t e r f a c e , j v m d i ) ,提供了新的a p i ,称之为j a v a v i r t u a lm a c h i n e a s p e c t i n t e r f a c e ( j v m a i ) 。 j v m a i 被设计为j v m 的一个插件,因此应用程序必须运行在p r o s e 特定的j v m 上。 a x o n 同样基于对j v m 的扩展和对j v m d i 的利用。它是一个e c a ( e v e n t c o n d i t i o n - a c t i o n ) 规则激发的模型,连接点用e v e n t 描述,切入点用e v e n t 和c o n d i t i o n 描述,通知用e v e n t 和条件关联的a c t i o n 描述。a x o n 同样被实现为s u n j v m 的一个插件。事件由j v m 生成,条件由a x o n 通过j v m d i 在运行时检测,通 知被实现为一般的j a v a 方法。在a x o n 模型里,a r o u n d 通知是不可行的,因为它基 于在连接点的拦截,一个通知是无法替代被调用的方法的。a x o n 支持有限的连接点, 如方法e n t r y e x i t ,异常t h r o w c a t c h ,域r e a d w r i t e 。p r o s e 和a x o n 的执行速度都只 能如调试器一样慢。p r o s e 提出的j v m a i 并不支持在一个给定类的代码中加入新的 成员的横切点( 即类型间声明) ,因为它的实现不能改变原来程序的源代码或二进制 码。 直接操纵二进制码的方式主要应用在j a v a 上,如j a c l 3 7 1 ,w o o l i ”1 。这种方式大 部分利用j v m d i 或在装载时改变字节码( b y t ec o d e ) 。h o o k s 或者被静态地插入到 所有连接点,或者在运行时当程序员指示程序开始使用某个方面时被插入程序中。 在使用j v m d i 的方式中,调试接口允许用户停止并查询运行中程序的状态。这种 技术给应用程序的执行带来了额外的负荷( 如上下文的转换) ,因此性能也如调试器 一般慢。此外,不同的方式支持的连接点和性能也不同。w o o l 仅支持方法调用、域 访问、对象实例化和异常处理,不支持类型间声明。j a c 在类装载到j v m 时改变 类的字节码,因此会产生很多空的h o o k s ,并且只支持方法调用和异常抛出。在c 领域,m i c r o d y n e r 是处理器特定的( p e n t i n m ) ,不支持多于一个的方面同时作用于 同一个j o i np o i n t 在m i c r o d y n e r 中,方面在运行时动态地部署,通过直接重写执行 中的代码实现编织。在这里方面并不是实现为对象( c 不是面向对象的语言) ,因此 不能利用o o p ( o b j e c t o r i e n t e dp r o g r a m m i n g ) 的特征,如构造函数、继承。 不同的编织方法间有很多不同之处。静态编织的执行效率高,但缺乏灵活性;动 态编织弥补了静态编织在灵活性上的不足,但却给程序带来格外的负担。不同的编 1 4 中山大学硕士毕业论文面向方面建模及编织工具的研究与实现 织方法对a o p 新概念的支持也不同i ”l ;有的只提供有限的连接点,因此限制了方 面可适用的应用程序;有的仅支持代码连接点,而有的也支持类型间声明;有的只 支持每个连接点一个方面,有的可支持每个连接点多个方面。寻求一种高灵活性、 高性能、普遍适合大部分应用程序的编织方法仍是学者们不断探讨的课题。 中山大学硕士毕业论文 面向方面建模及编织工具的研究与实现 第3 章扩展u m l 用于方面的建模 2 1 2 节提到,方面是由域成员、方法、通知、横切点、类型间声明组成的。因 此,在一些研究中,往往把通知、横切点、类型间声明作为方面的属性定义在一个 方面里。然而,在建模阶段这样的定义将使得方面的重用性降低,因为通知、横切 点、类型间声明与方面具体应用到哪个组件相关。为提高方面的可重用性,本文提

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论