




已阅读5页,还剩62页未读, 继续免费阅读
(计算机软件与理论专业论文)标识符分析方面挖掘方法研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
哈尔滨工程大学硕士学位论文 摘要 面向方面编程技术与传统的重构技术融合,掀起了面向方面软件重构研 究的热潮。这一课题分为方面挖掘和方面重构两个步骤,方面挖掘是方面重 构的先决条件,也是面向方面软件重构的关键步骤,其结果直接影响软件重 构的进行。 本文选取一种典型的方面挖掘方法标识符分析方法,将研究重点放 在对方法的改进和提高上。标识符分析方法面临着概念生成时间爆炸、手工 挑选概念复杂难行以及在大型遗产系统中难于应用三大难题,其原因在于标 识符分析使用形式概念分析算法生成大量形式概念,时间消耗大,并且结果 包含了大量干扰挖掘的冗余概念。通过分析,作者发现,能够通过对生成概 念格的上下文表进行预过滤,阻止那些对有效概念的生成毫无用处的元素和 属性进入概念生成阶段。据此,作者给出了一系列定义、命题及其证明,保 证所用的过滤方法有正确的理论依据,并在此理论基础上,提出了名为“预 过滤器”的预过滤算法,将上下文表转化成上下文矩阵,通过对矩阵进行简 单、巧妙的数学变换和运算,高效、灵活地实现对上下文的过滤。值得说明 的是,预过滤算法的应用范围不局限于方面挖掘方法,只要对感兴趣的概念 包含的元素和属性个数有要求,就可以考虑使用,因此具有一定的普遍意义。 改进的标识符分析方法,将预过滤器加入到概念生成步骤之前,有效地 控制了概念生成的输入量,节省了大量概念生成时间,减少了冗余概念的生 成,生成的概念格结构更加清晰,向“所得即所需”的理想状态迈进了一大 步;并且降低了手工挑选横切概念的工作量和复杂度,提高了标识符分析方 法的挖掘能力和适应性。 关键词:面向方面编程;方面挖掘:标识符分析:形式概念分析;预过滤器 哈尔滨工程大学硕士学位论文 a b s t r a c t t h em t c g r a f i o no fa s p e e t - o r i 钮t e dp r o g r a m m i n g ( a o p ) a n d 坞f a e t o r i n g 舀v e san e wp r o b l e mo f a s 弘蛾- o r i 翎斓r e f a c t o r i n g ,w h i c hc o 商s 协o f t w os t e p s , ei sa s p e c tm i n i n g , t h eo t h c fi sa s p e c tr c 自c t o r i n g a s p e c tm i n i n gi sn o to n l yt h e p r e e o n d i d o no f 部p e x t f a e t o r i n g b u t a l t h em o s t 岫r t a n t s t e p o f a s p e c t o r i 钮t e dr e f a e t o r i n g t h ea u t h o rc h o o s e si d t m 盱a n a l y s i s 谢l i c hi sar e p r e s e n t a t i v em e t h o do f 勰p c c tm i n i n ga n dp u t se m p h a s e so nt h ei l n p f o v 锄e mo ft h em e t l a o d i d c 州f i 盱 a n a l y s i si sc o n 丘d n t e dw i mt h r e ep r o b l e m s f i r s t l y , i tc o s t st o om l l l c ht i m et o g 蛆e r a t ec o n c e p tl a t t i c c s ;s e e o n d l y c h a s i n gm t e r e s t c dc o n c e p t sm a n u a l l yi s 觥i v e l yc o m p l i c a t e d ;t h i r 如i t sd i 伍c i d tt ob ea p p l i e dt ol a r g e - a l el e g g y s ) r s t 即岱t h e s ep r o b l e m sa 球c a u s c db yu s i n gf o r m a lc o n c e p ta n a l y s i sf l e a ) t o g e m t ef o r m a lc o n e e p t sw h i c hc o n t a i nam a s so fr e d 岫d a n to n 鼯t h ea u t h o r n o d e e dt h a tt h o s er e d m d a n tc o n 蚓吣c 趾b ed i m i n a t c db y 丘1 t c l i n ge l e m 乜a n d a t t r i b u t e si nt h ec 鲫蚴硒i n p u to ff c aa l g o f i t h m a e e o r d i n 西y , as e r i e so f d e f i 枷。璐p r o p o s i t i o n sa n dt h e i rc 硎f i c 撕o n sa i es h a w e dt 0a 世n l r et h a tt h e f i l t e rm e t h o di sb a s e do nc o i r e c tr a t i o n a l e 也e naf i l t e ra l g o f i t h mn 锄e dp r e - f i l t e r w h i c hi sb a s e du p o nt h ef o 印m gr a t i o n a l ei sc o n 捌n l d e 正d e t a i l e d l y ,ir e f i l t e r i r a n s f o r m sc o n 蹴t a b l e 幽c o n t e x tm a t r i x a n dt h e nc o m p u t e st h em a l l i x 讹 m a t h e m a t i c a lm e t h o ds i i 叩l ya n dm g e m o u s l yt of i l t c fc o n t c x t i 棚l d a b l y ,t h e 删c a b i 脚o f 胁f i l t e ri sn o t 删t d 硒p e e tm i n i n g ;“啪b eu s e d 锄”慨鹤l o n g 鹤t h e f e i sn u m b e rl i m i tt oc o n c 印t s d e m e n t sa n da t t r i b u t e s , i th a sac 锄s i g n i f i e a n c e p r e - f f l t e rc 姐b cu s e dt or c d u e e 呻o ff c aa l g o r i t h m , i ti sp l a e e ai n 丘o n to ft h es t e po fc o n e c p tg 锄e r a t i o ni nt h ei m p r o v c di d 酬船a l _ l a l y s i s 晰t h ir e - f i l t e r , p m g r a m m e r sc a nn o to n l ys a v e 枷c ht i m e b u ta l s og e tl e s sr e d 眦d a t a t c m c 印t sa n dm o l e g i b l ec o n o e p tl a t t i c e s ;i tm a k e sap r o g r e s so n t h ei d e a ls t a t e 哈尔滨工程大学硕士学位论文 w h a ty o ug e ti sw h a ty o un e e d ,t o o i na d d i t i o n , t h ew o r k l o a da n dc o m p l i c a t i o n o fc h o o s i n gc r o s s c u t t i n gc o n c e p t sm a m m h yi sd e c r e a s e d , a n dt h ep e r f o r m a n c e a n da p p l i c a b i l i t yo f i d e n t i f i e ra n a l y s i si si m p r o v e d k e y w o r d s :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 s p e c tm i n i n g ;i d e n t i f i e ra n a l y s i s ; f o r m a lc o n c e p t a n a l y s i s ;p r e - f i l t e r 哈尔滨工程大学 学位论文原创性声明 本人郑重声明:本论文的所有工作,是在导师的指导 下,由作者本人独立完成的。有关观点、方法、数据和文 献的引用已在文中指出,并与参考文献相对应。除文中已 注明引用的内容外,本论文不包含任何其他个人或集体已 经公开发表的作品成果。对本文的研究做出重要贡献的个 人和集体,均已在文中以明确方式标明。本人完全意识到 本声明的法律结果由本人承担。 作者( 签字) :主垂堑室 日期:1 年) , e l 7e t 哈尔滨工程大学硕士学位论文 1 1 课题研究背景 第1 章绪论 在软件开发领域,2 0 世纪9 0 年代至今,是面向对象( o h l j e c t - o r i e n t e d , 0 0 ) 技术的时代。面向对象技术将世界万物抽象成类,利用封装、继承、多 态等特性,实现了问题域到软件模块的良好映射,使软件系统在结构上更趋 合理,代码更容易理解、复用和维护,所以在过去的十多年时间里备受青睐, 成为主流的编程技术。面向对象技术的出现促使已经存在的非面向对象的遗 产软件系统( l e g a c ys y s t e m s ) 向面向对象系统转化,从而推动了软件逆向 工程( r e v e r s ee n g i n e e r i n g ) 、软件再工程( r e e n g i n e e r i n g ) 和软件重构 ( r e f a c t o r i n g ) 研究的发展。 现代软件工程采用“分而治之”( d i v i d ea n dc o n q u e r ) 的策略,将软 件开发看作是实现核心关注点( c o r ec o n c e r n s ) 和横切关注点( c r o s s c u t t i n g c o n c e r n s ) 分离的过程。核心关注点完成系统核心的业务功能和业务逻辑: 横切关注点实现一般会横跨多个核心关注点的配套设施,如日志记录、跟踪、 错误处理等,也可称为系统级关注点。在面向对象软件开发的需求和设计阶 段,各个关注点往往还是彼此分离的,而到了实现阶段,面向对象的程序设 计方法就无法再保持核心关注点和横切关注点的分离,导致了代码缠结 ( t a n g l i n g ) 和代码分散( s c a t t e r i n g ) 问题n ,促使一种能够自然地描述 横切关注点的编程模型面向方面编程( 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 s p e c t o r i e n t e ds o f t w a r e d e v e l o p m e n t ,a o s d ) 的深入人心,面向方面的重构也成为最近三年的研究热 点。 哈尔滨工程大学硕士学位论文 将现有遗产系统重构成面向方面系统的原因有很多。一方面,即使在系 统设计阶段,能够获得详尽、准确的需求,系统设计非常合理和完善,随着 时问的推移和软件应用环境的不断变化,对系统的功能也会提出更多更新的 要求,迫使系统做出适应性的变化。另一方面,即使在系统的实现过程中使 用最先进的编程技术,编写出完美、高效的代码,仍然会存在某些关注点在 现有的模块机制下不能很好地封装,而是横切系统的多个代码块的现象,这 是编程语言本身的局限,而不是通过良好的编程技术所能弥补的。这些横切 关注点存在的结果就是某些关注点需要使用复杂的代码实现,关注点分散在 系统的各个部分,并且与其它关注点的代码缠结在一起,使软件系统更难于 理解、维护和进化。使用面向方面编程技术的特有机制,使这样的横切关注 点模块化,结果得到模块独立、结构清晰、代码集中且容易理解、维护和扩 展的系统。 现今存在的软件系统绝大多数是基于面向对象技术构建的,还有很多面 向过程的软件系统,为了获得更好的模块性、可用性和可维护性,增强软件 代码的复用性,有必要对这些遗产软件系统进行面向方面的重构。要使现有 的遗产软件系统转化成面向方面的软件系统,需要先进的自动化工具来帮助 软件工程师识别遗产系统中的横切关注点,还需要将找到的横切关注点封装 起来,并提供将不同的关注点融合成系统的机制。将遗产系统重构成面向方 面的系统需要两个步骤,即找到遗产系统中能够重构成方面的横切关注点, 然后用面向方面的方法封装这些横切关注点。就是文中将要介绍的两个概念: 方面挖掘( a s p e c tm i n i n g ) 和方面重构( a s p e c tr e f a c t o r i n g ) 。 方面挖掘是方面重构的先决条件,也是面向方面重构过程的关键步骤, 其挖掘效果直接影响着重构的效果。方面挖掘技术和工具的发展对于识别现 今具有一定规模和复杂度的遗产软件系统的关注点代码来说是绝对必要的。 这些技术可以允许开发者使用某种逆向思维策略帮助他们将软件系统分解为 大量概念化的片段,即关注点,以便可以在不考虑其他代码的前提下独立的 研究和理解这些片段。另外,方面挖掘技术将所有的横切关注点捕捉并封装 成称为“方面( a s p e c t ) ”的模块,对后续的软件开发和重用来说也是非常 有价值的技术。 2 哈尔滨工程大学硕士学位论文 1 2 国内外研究现状 面向方面的重构技术既有面向方面技术的“新”,又有重构技术的“热”, 因此得到了世界各国研究者的广泛关注,每年都在欧洲和美国召开多次相关 的国际会议和研讨会。到目前为止,国内外数十个研究小组已经提出十余种 方面挖掘方法。 国外方面,几个比较知名的研究小组和典型的研究成果如下: ( 1 ) 德国人s i l v i a b r e u 和j e n sk r i n k e 提出使用动态分析来检测程序 执行过程中的重复调用模式,并且从中提取横切关注点信息“。由于动态分 析本身具有不完全性,即不能保证所有代码都被完全执行,也因此可能遗漏 横切关注点,所以,b r e u 又提出使用静态的类型信息来加强这一方法m 。 ( 2 ) 荷兰人t o m t o u r w e 和比利时人k i m m e n s 提出了一种对源代码中类 名和方法名进行形式概念分析的方面挖掘技术,称为“标识符分析一”。本 文将对该方法进行改进,后面将对其进行详细介绍。 ( 3 ) 意大利人p t o n e l l a 和m c e c c a t o 综合了动态分析和形式概念分析 方法,提出对程序的执行轨迹进行形式概念分析的方面挖掘方法n t ,。通过动 态执行设计的用例,捕捉程序运行的轨迹,对轨迹中的信息进行形式概念分 析,获取潜在的横切关注点。 ( 4 ) 荷兰的m a r i u sm a r i n 等人根据程序中方法调用的扇入( f a n - i n ) 度量值来识别可能的方面“”。最近,他们通过对横切关注点进行分类研究m , 又加入聚类调用分析( g r o u p e dc a l l sa n a l y s i s ) 、重定向探测器 ( r e d i r e c t i o n sf i n d e r ) 等概念,提供了一个基于关注点分类的通用挖掘框 架w 。 ( 5 ) 美国人d a v i ds h e p h e r d 和l o r ip o l l o c k 通过对相关方法的分层聚 类来寻找横切关注点n ”。d a v i ds h e p h e r d 还提出了一种基于克隆检测的方面 挖掘方法,并将其实现为o p h i r 框架的扩展,作者在该技术中使用了程序依 赖图( p r o g r a md e p e n d e n c eg r a p h ,p d g ) 来识别方面“”。 ( 6 ) k g y b e l s ,a k e l l e n s 提出使用“独特方法( u n i q u em e t h o d s ) ”启 发式来识别可能的横切关注点“,这种基于启发式的技术还能够自动地找到 3 哈尔滨工程大学硕士学位论文 非面向方面软件系统中的暗含的能够转化成切入点( p o i n t c u t ) 的代码。 ( 7 ) 最近,m c e c c a t o 、m m a r i n 、k m e n s 等人通过对动态分析、f a n i n 分析和标识符分析优缺点及挖掘效果的总结,将三种方法综合起来,进一步 提高了挖掘的精度w 。 国内方面的研究尚处于起步阶段,研究比较多的是吉林大学。 ( 1 ) 吉林大学的金龙飞和刘磊提出了一种基于形式概念分析的语句级自 动化方面挖掘方法m 。 ( 2 ) 何丽莉、白洪涛和张家晨提出两种方法,一种是使用概念格来挖掘 方面的方法w ,另一种是使用聚类分析来挖掘方面的方法t ”, s j 。 ( 3 ) 赵健也在硕士毕业论文中提出了一种基于形式概念分析的语句级方 面挖掘方法w 。 ( 4 ) 哈尔滨工程大学的曲立平提出了一种基于方法调用树的自动化方面 挖掘方法m 。 分析国内外现有的方面挖掘技术的理论基础,不难发现,它们所使用的 技术无外乎数据挖掘技术、w e b 挖掘技术或者程序理解和分析技术,比如, 形式概念分析和聚类分析,或者更经典的代码分析技术,如程序切片技术、 软件度量和启发式、克隆检测和模式匹配技术、动态分析技术等等n ,。从方 面挖掘过程中是否执行程序可划分为动态分析和静态分析,从现有方法看, 静态分析的方法居多,动态分析较少,二者各有利弊,研究者已经认识到这 一点,正向动态分析和静态分析结合的方向努力,并取得了一些成果。 1 3 研究热点和难点 一个好的方面挖掘方法,首先要有很强的横切关注点识别能力,通过横 切关注点的某些特征,准确地将其捕捉;其次是方法要有可行性,包括时间、 空间消耗,作为挖掘主体的人在这一过程中所要做的工作强度,以及相应挖 掘工具的自动化程度。为了满足这两个目标,还需要进行很多研究,而且随 着研究的深入,工作的划分也将越来越细。研究工作所要走的无外乎以下三 条路线: 4 哈尔滨工程大学硕士学位论文 1 提高单个方法挖掘能力 目前提出的方面挖掘方法和挖掘框架基本上都处于初始阶段,挖掘流程 或工具本身就有很多需要完善的地方。从捕捉单一的横切特征到更全面地捕 捉特征,从单一地使用动态分析技术或静态分析技术到二者结合应用,更深 入地简化挖掘流程,都可能提高单个方法的挖掘能力。 2 探索新方法 提出创新性的思路和方法,不仅现有的数据挖掘和w e b 挖掘等其它研究 领域中常用的方法可以为方面挖掘所用,甚至可以提出更适合方面挖掘自身 特点的新方法。 3 综合多个方法 上节所列的技术中大部分都是或捕捉代码缠结特征,或捕捉代码分散特 征;或使用动态分析方法,或使用静态分析方法,因此这些方法各有优缺点, 都有自己擅长的挖掘领域,如果不同的方法所挖掘的结果交集很小,那么综 合使用这些方法,或增强捕捉不同横切特征的能力,或综合使用动静态分析 技术,能够更有效的获得候选方面,提高挖掘结果的准确度。 目前,对方面挖掘的研究,已经由单一的使用对源代码的静态分析技术 或对程序执行轨迹的动态分析转向综合使用动态和静态分析,试图通过更全 面地捕捉横切特征来挖掘横切关注点。这是下一步研究的热点,而如何有效 地实现这种结合就是研究的难点所在。 还有其它一些与方面挖掘相关的研究问题,如探索横切关注点是否具有 除缠结和分散外的其它特征,横切关注点的分类,为比较各种挖掘方法的效 果,还需要建立一个通用的标准来衡量。 总之,无论是改进现有的方面挖掘方法还是研究新的方面挖掘方法,都 还有许多工作要做。同时,方面挖掘的直接目的是方面重构,在研究挖掘方 法的过程中,有必要将方面挖掘和方面重构协同考虑,使得挖掘出的横切关 注点能够更容易地映射到面向方面编程的概念。 哈尔滨工程大学硕士学位论文 1 4 本文的工作 总的来看,方面挖掘方法的研究还处于起步阶段,但现有的一些方法已 经为进一步研究打下了良好的基础,况且要综合多种方法的优势,也需要具 有良好挖掘效果的单个方法作保证,因此,本文采取第一条研究路线,将研 究重点放在提高单个方法的挖掘能力上。本文所要做的工作就是在标识符分 析方面挖掘方法的基础上,针对其挖掘过程中概念生成耗时多,产生大量干 扰挖掘的冗余概念,需要程序员从大量概念中手工挑选感兴趣的概念,并进 而限制了标识符分析方法应用于大型遗产系统等问题,通过在挖掘过程中添 加预过滤器,减少生成概念格的输入信息,在不影响挖掘效果的前提下,将 大量不必要的冗余概念滤除,为重构程序员提供更简洁、更贴切的重构素材, 力求使标识符分析方法使用起来更加方便、准确、高效、实用。 论文将给出预过滤算法和预过滤器工具原型,利用预过滤工具,使用与 原方法相同的实例进行验证,分析实验数据,比较改进前后的实验结果,通 过实验效果验证方法改进后是否达到预期目标,从而得出改进方法的进步之 处以及需要进一步完善之处。 1 5 论文组织结构 第一章绪论,介绍课题研究的背景和国内外研究现状,以及当前研究的 热点和难点,指明本文所做的工作;第二章介绍面向方面编程和形式概念分 析技术,使读者全面、深入地了解课题相关知识,便于对文章的理解;第三 章介绍方面挖掘和形式概念分析在方面挖掘方法中的应用,重点介绍本文所 要改进的标识符分析方法;第四章介绍作者提出的预过滤器,通过一系列定 义和命题及其证明,奠定算法理论基础,进而给出预过滤算法,是本文创新 之所在;第五章首先指出原方法的不足之处,并据此将预过滤器应用于标识 符分析方法的流程之中,给出改进后的标识符分析方法。通过实验,验证改 进的效果,并总结改进后给方法带来的提升;结论部分对文章进行总结,并 对方面挖掘的研究趋势做了展望。 6 哈尔滨工程大学硕士学位论文 第2 章面向方面编程和形式概念分析 本章介绍论文涉及到的背景知识,包括面向方面编程技术和形式概念分 析技术,方面挖掘是面向方面编程的一个研究分支,而形式概念分析是方面 挖掘中一种常用的技术手段。 2 1 面向方面编程 2 1 1 面向方面编程产生的原因 软件开发过程就是使用计算机语言将人们关心的现实世界的问题映射到 计算机世界进行求解的过程。软件设计的主要目标是要实现好的结构,使开 发出来的软件具有良好的构造性、可用性、可维护性。复杂性是软件开发过 程所固有的性质,相应地,人们运用科学抽象的方法,将大问题分解成若干 可以驾驭的小问题,即常说的“分而治之”( d i v i d ea n dc o n q u e r ) 策略。这 些小问题,从程序员的角度称它们为关注点。一个关注点可以是一个特定的 目标、概念或者兴趣域m ,也可以看作是一个有意义的小的、可管理的、可 描述的软件组成部分。在软件开发过程中,人们总是追求关注点的模块化、 封装,以期获得更高的抽象结果。 目前,主流的软件开发方法是基于面向对象技术的,包括面向对象分析、 面向对象设计和面向对象编程。面向对象技术能够自然地从实现问题域到软 件模块的转换,但是,随着应用的不断深入,人们也逐渐发现,传统的程序 经常表现出一些不能自然地适应横跨多个程序模块的行为,例如日志记录、 对上下文敏感的错误处理、性能优化、同步、内存管理以及其它许多趋向于 横切多个核心关注点的系统行为,将这种行为称为“横切关注点”。 图2 1 所示的就是面向对象技术中横切关注点的实现方式,图中每个竖 条代表一个类的代码,每个黑色块代表一个横切关注点。在面向对象世界里, 并没有强调横切关注点这个概念,软件被划分为多个离散的类,每个类担任 7 哈尔滨工程大学硕士学位论文 一个角色,以此来实现软件系统角色的划分。但是类与类之间的关系通常是 错综复杂的,面向对象只通过继承表达了纵向的联系,而类与类之间横向的 联系是其所忽略的,结果导致类之间的一些共同属性散乱分布在各个类的代 码中。从角色划分角度来说,由于类承担了多个角色而导致代码混乱,结果 使得封装不严密,划分的角色也不清晰,这显然与面向对象思想相违背。从 软件的维护和复用的角度考虑,这样的设计将给维护和复用带来沉重的负担。 i n n 一一 m u m _ _-_ 一一 一一 i 一 b i l l 一 一 _ 一 一一 一一一_一 _ 一 _ 一 一一一 图2 10 0 中横切关注点的实现方式 面向对象技术遇到的最典型的问题是: 1 代码缠结( t a n g li n g ) 一个软件模块需要承载多个关注点的实现。软件系统中的模块可能要同 时兼顾几个方面的需求,导致相应关注点实现元素的同时出现。例如,开发 者经常要同时考虑业务逻辑、性能、同步、日志和安全等问题,从而导致代 码相互交织在一起,引起混乱。 2 代码分散( s c a t t e rin g ) 一个关注点的实现在代码中到处分散。由于横切关注点是系统级关注点, 涉及到多个模块,相关实现也就遍布在多个模块当中。例如,在一个使用了 数据库的软件系统中,所有访问数据库的模块都要进行相同或相似的日志记 录操作,因此,日志记录就影响到了多个模块,尽管各日志记录的实现相同 或者相似,但仍然需要在多个模块中分别实现,从而导致代码的分散。 哈尔滨工程大学硕士学位论文 缠结和分散的代码又会从多个方面影响系统的设计、开发和维护,对软 件开发过程和软件质量都有不同程度的影响,导致以下问题的出现: 1 可读性差,代码质量差 同时实现多个关注点,不同关注点的实现代码交织在一起,不仅使关注 点与其实现之间的对应关系不明显,而且混乱的代码使得代码中存在的问题 更具有隐蔽性,难于理解和查错,也使本应该特别注意的关注点得不到应有 的关注,更容易产生代码“坏味道”,对后期的维护也留下更多的隐患。 2 生产率低 同时实现几个关注点使开发人员的注意力在各关注点之间不断来回转 移,导致生产效率降低,同时也增加了出现错误的可能性。 3 代码重用率低 由于一个模块实现多个关注点,因此其他需要类似功能的系统不能直接 使用该模块,代码的重用率比较低,进而降低了生产效率。 4 系统难以扩展 狭窄的视角和有限的资源使得只能注意当前关注点的实现。由于实现不 是模块化的,并且牵涉到多个模块,为了新需求修改子系统可能会带来数据 的不一致,而且还需要相当规模测试来保证这些修改不会带来错误。 此外,面向对象编程技术在大型系统、分布式系统和灵活性要求较高的 系统中也存在很多局限。 在传统的开发技术中并没有强调横切关注点这个概念,使得客观存在的 横切需求被迫实现在核心需求的代码中,这种需求和实现的不匹配,导致了 代码的混乱和分散。因此,如何将横切关注点从核心需求模块中分离出来, 解决“代码缠结”和“代码分散”问题,成为软件工程界最迫切的需要。于 是,一种更自然地描述横切关注点的编程模型面向方面编程应运而生。 面向方面编程就是来试图用多维空间容纳多维关注点的实现,从而在面向对 象技术的基础上,更进一步迈向问题域的自然解决方式,以提高软件的易理 解性、易维护性等。 2 1 2 面向方面编程的基本概念 9 哈尔滨工程大学硕士学位论文 2 1 2 1 面向方面编程的提出 面向方面编程( a o p ) 的概念是在1 9 9 7 年的欧洲面向对象编程大会( e c o o p 9 7 ) 上,由美国施乐( x e r o x ) 公司在硅谷p a l o a l t o 研究中心( p a r c ) 的首 席科学家g r e g o rk i c z a l e s 首次提出。6 r e g o r 教授领导的研究小组在完善面 向对象技术的过程中尝试了多种方法,最终发现问题的症结在于“横切”,并 据此在面向对象技术的基础上,进行了针对“横切”封装的加强和补充,一 种新的编程思想和编程范型面向方面编程诞生了。a o p 的目标是使设计 和代码更加模块化和更具结构性,使关注点局部化而不是分散于整个系统中, 同时和系统其它部分保持良好定义的接口,从而真正达到“关注点分离,分 而治之”的目的。图2 2 所示是面向方面编程技术实现横切关注点的方式。 1 图2 2a o p 技术实现横切关注点的方式 将图2 2 与图2 1 对比,可以看到,散布在各关注点中的横切部分用单 独的模块实现,关注点之间的横向联系得以提取和封装,各关注点分工更加 明确,更加专注于所要处理的事务,使程序的结构更加清晰,更利于管理、 维护和扩展。这些充分体现了面向方面编程的核心思想,就是关注点的分离, 不仅在设计上分离,在实现上也要分离。 2 1 2 2 面向方面编程模型 a o p 模型包括三个部分:组件语言、方面语言和编织器( w e a v e r ) 。其 1 0 哈尔滨工程大学硕士学位论文 中组件语言用于实现核心关注点,方面语言用于实现横切关注点,方面代码 与组件代码通过编织器实现融合 4 0 。 如图2 3 所示,a o p 包括三个清晰的开发步骤w : ( 1 ) 方面分解:分解需求,抽取出核心关注点和横切关注点。 ( 2 ) 关注点实现:独立的实现这些关注点,互不干扰。 ( 3 ) 方面重组:利用重组规则,用方面编织器将所有的关注点编织在 一起,形成最终的可运行系统。 图2 3 面向方面编程的开发步骤 a o p 不仅是一种程序设计技术,也是一种程序设计范型,同o o p 技术一 样,也须有相应的程序设计语言来体现和实现这种技术。已有的a o p 语言大 多是基于传统程序设计语言而进行的扩展,增加a o p 语言构造,提供对a o p 语言模型以下特有概念的支持: 1 方面( a s p e c t ) 一个方面是封装横切关注点的一个独立的标准单元,类似于面向对象编 程中的类。其中包括通知和切入点的定义。 2 连接点( j o i np o i n t ) 程序执行过程中明确定义的可以被识别的点或位置。它是a o p 中最基本 的元素,表示程序控制流中的某些点。 3 切入点( p o j n t c u t ) 连接点的集合,通过连接点标识明确定义需要收集的连接点和有关参数 值,它是联系方面和类的桥梁。 哈尔滨工程大学硕士学位论文 4 通知( d v i o e ) 在符合特定条件的情况下执行具体动作的代码的语言构造予称为通知, 即声明在连接点被调用时应该执行的动作。它是类似函数的一种结构,定义 了横切关注点的功能定义。依据切入点的语义,将通知分为以下三类:b e f o r e a d v i c e ,在连接点之前执行; a f t e ra d v i c e ,在连接点之后执行;a r o u n d a d v i c e ,代替原连接点处方法的执行。 5 类型间声明( i n t r o d u c t i o n ) 允许程序员修改程序的静态结构、名称,添加类的属性、方法以及修改 类之间的继承关系。 6 编织( w e a v e ) 为了将核心关注点和横切关注点两种关注点代码有机融合并形成最终的 可执行形式,a o p 引入了编织机制。编织器的设计与实现是a o p 技术要解决 的关键问题之一,也是与面向对象技术的主要区别。编织器的工作原理类似 于面向过程或者面向对象程序设计中的链接器,但比链接器更复杂。 2 1 3 面向方面编程的优势 面向方面编程技术是软件开发方法学的一个重要里程碑,为软件开发提 供了更有效的方法,归纳其优点如下m : 1 模块化横切关注点 a o p 为开发者提供了一种描述横切关注点的机制,用最小的耦合处理每 个关注点,并能够自动将横切关注点织入到面向对象的软件系统中,从而实现 了横切关注点的模块化,是a o p 技术的显著标志。 2 系统容易扩展 由于方面模块和类模块都专注于实现相互独立的功能,核心关注点根本 不需要知道横切关注点如何实现,只需指明触发方面执行的连接点即可,一方 面,很容易通过建立新的方面加入新的功能;另一方面。当往系统中加入新的 核心关注点模块时,已有的方面也能够自动横切进来,使系统易于灵活地扩 展。 3 设计决定的迟绑定 1 2 哈尔滨工程大学硕士学位论文 使用a o p ,设计师可以推迟为将来的需求作决定,因为他可以把这种需求 作为独立的方面很容易地实现并补充到系统中来,有效地克服了过度设计和 不足设计的问题。 4 更好的代码重用性 a o p 把每个方面实现为独立的模块,模块内部是高度内聚的,而模块之间 是松散耦合的。这种高内聚、低耦合的实现方式意味着更好的代码重用性,a o p 在这一点上比o o p 做得更好。 5 简化程序员的工作 从开发者的角度来说,a o p 使得组件的开发可以独立于应用平台,开发 者可以是某一领域的专家,优化地实现领域内通用的组件和方面行为,只关 心要实现的功能,无须关心将要应用的具体系统。使用者根据组件和方面的 说明来搭建自己的应用系统,而不用关心其实现方式,这样就增大了黑盒复 用的程度,为组件生产的工程化打开了方便之门。 总之,a o p 的出现,是对面向对象技术的强化和延伸,将对软件开发的 过程造成根本性的影响,将会成为程序设计方法学发展的一个新的里程碑。 2 2 形式概念分析 在哲学中,概念被理解为由外延和内涵两个部分所组成的思想单元。基 于概念的这一哲学理解,德国的r w i l l e 教授于2 0 世纪8 0 年代初提出形式 概念分析( f o r m a lc o n c e p ta n a l y s i s ,f c a ) 的概念,用于概念的发现、排 序和显示。f c a 是格论的一个分支,当时是作为一个数学原理提出的。在 f c a 中,概念的外延被理解为属于这个概念的所有对象的集合,而内涵则被 认为是所有这些对象所共有的特征或属性的集合,这实现了对概念的哲学理 解的形式化。所有的概念连同它们之间的泛化与例化关系构成一个概念格, 也称g a l o i s 格,准确而简洁地描述了概念之间的层次关系,因此成为一种重 要的知识表示方法。 9 0 年代,f c a 和人工智能( a r t i f i c i a li n t e l l i g e n c e ,a i ) 的结合标 志着f c a 被正式引入计算机科学。随着研究的深入,f c a 在计算机科学领域 哈尔滨工程大学硕士学位论文 的应用逐步深入和广泛,越来越多地被应用到数据挖掘、信息检索、机器学 习、软件工程等领域,成为处理和组织大规模数据的有效工具,因此,f c a 成为概念化知识处理( c o n c e p t u a lk n o w l e d g ep r o c e s s i n g ,c k p ) 的数学基 础。 本文为避免读者对概念所包含的“对象”与面向对象技术中的“对象” 相混淆,在下面的描述中,把形式概念分析中的对象称为“元素”。 2 2 1 上下文 f c a 算法使用一个关系表或者布尔代数表7 作为输入,中包含着一组元 素和这些元素所具有的属性的集合,称作上下文( c o n t e x t ) 。 定义2 1 上下文是一个三元组:七= ( e ,a ,置) ,其中层为元素的有限集 合,4 为属性的有限集合,r 为e 和彳的二元关系,即r e x 4 。如果有 ( e , a ) e 震,表示e 具有口属性。二元关系r 可以用一个二维表r 表示,例如表 2 1 9 。 表2 1 编程语言和它们支持的编程范式 编程语言 0 0 f u n c t i o n a l l o g i c s t a t i ct y p i n gd y n a m i ct y p i n g j a v a s m a l l t a l k c + +, s c h e m e p r o l o g 表2 1 中列出了不同的编程语言和其相关属性,这里编程语言的名称就 是元素,语言所具有的特点就是属性。表中单元格的标识“”的意思是对 应行的编程语言具有对应列的属性。 2 2 2 概念 哈尔滨工程大学硕士学位论文 i s 0 7 0 4 标准将概念划分为三个层次;对象层、概念层和表示层。其中, 对象和名字之间不存在直接关系,仅由概念为它们提供间接关系。对象为概 念层提供概念的外延,对象具有的共同属性又为概念层提供概念的内涵。在 表示层中,概念被指定成定义,并被赋予一个名字。 定义2 2 概念c 是一个二元组( zy ) ,其中z 昂】,4 ,满足下 列条件: x = x eiv y e y x r y ,y = y aiv r e xx r y ) f c a 算法确定了元素和属性的最大分组,称作概念( c o n c e p t ) 。称工为 概念的外延( e x t e n t ) ,记作e x t ( c ) ;y 为概念的内涵( i n t e n t ) ,记作i n t ( c ) 。 概念具有如下性质 9 : ( 1 ) 概念中的每个元素都共享概念中的属性; ( 2 ) 概念中的任意一个元素都具有组中的所有属性: ( 3 ) 除概念中的元素外,没有其它元素同时具有这些属性: ( 4 ) 除概念中的属性外,没有其它属性被概念中所有元素同时具有。 这些性质充分表明概念是一个具有相同属性的所有元素的最大分组。 2 2 3 概念格 定义2 3 概念格( c o n c e p tl a t t i c e ) 由集合e ,彳和关系r e a 决 定,表示成( j p ,s ) ,其中 p = ( r ,dix e ,y a ,( x ,】,) 是一个概念 s 由下式指定: ( x i ,h ) ( z 2 ,n ) 罩x l x 2 使用如表2 i 所示的上下文作为输入,生成图2 4 所示的概念格 9 ,所 有概念被排列到一个概念格中,其中每一个矩形就代表一个概念,矩形的上 半部分是概念包含的元素的集合,矩形的下半部分是元素具有的属性的集合。 位于概念格的最下面概念包含了具有所有属性的元素。由于本例中没有 这样的编程语言,这个概念不包含任何元素。类似地,最上面的概念包含了 那些所有元素都具有的属性,本例中也没有这样的属性。其它的概念代表相 关的编程语言的分组,例如概念( j a v a ,c + + ) , s t a t i ct y p i n g ,o b j e c t 哈尔滨工程大学硕士学位论文 o r i e n t e d ) ,聚集了所有静态类型的面向对象语言。 j a v as m a l l 洮c + + s c h e m e p r o l o g ( ) j a l t ac 每+ s m a n m 墩s c h 目a ep r o l o gs m 襁a 墩 ( o b j e c to n e t e d )( d y m r m c t y p m g ) l ij a v a c + +s m a l l t a 墩s c h e m e p r o l o g l ( s 鼬e 唧i n g , ( d y m n u ct y p i n g ,( d y r a r m ct y p i n g ,f d y n e v o l et y p i n g , f 哟lo n m t e d ) o b j to n - t e f l )f i m c u o r 口1 )l o g i c ) j ( ) 嘲e c to n m t e d ,f u n c u o n a l 。l o 彩c s t a u ct y p i n g ,d y n a m mt y i n g ) 图2 4 表2 1 上下文对应的概念格 2 2 4 概念格的生成 简言之,概念格生成一般分为以下三步: ( 1 ) 选择元素和属性; ( 2 ) 根据元素和属性的关系,构造上下文; ( 3 ) 将上下文作为输入,利用概念生成算法生成概念格。 对元素和属性的选择方式不同,是形式概念分析方法应用差异的显著标 志。对一个给定的上下文,典型的概念格生成算法有批处理算法和增量算法。 对同一批数据,生成的概念格是唯一的,即不受元素或者属性排列次序的影 1 6 哈尔滨工程大学硕士学位论文 响,也不受概念生成算法的影响。 2 3 本章小结 本章介绍了面向方面编程技术和形式概念分析技术的由来以及关键概 念,便于读者理解全文,也便于文章后续的叙述。方面挖掘是面向方面编程 技术的研究和应用的一个分支,而形式概念分析技术为方面挖掘方法的研究 提供了一个有效的工具。本文的研究正是通过对概念生成过程进行深入剖析, 才寻找到改进标识符分析方法的突破口。 1 7 哈尔滨工程大学硕士学位论文 第3 章方面挖掘 方面挖掘是面向方面软件重构的第一步也是关键一步,挖掘的效果将直 接影响方面重构的进行。本文研究的课题就是方面挖掘方法,选取了一种典 型的方法标识符分
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 旅游民宿退房协议范本及清洁维护标准
- 理发店员工招聘与职业规划辅导劳务合作合同
- 跨学科研究生委托培养与技术转移转化合同范本
- 产业园区物业合同终止及产业创新服务协议
- 建筑工程合同审计与财务管理要点解析
- 企业核心技术人员竞业禁止补偿标准合同范本
- 离婚后共同财产分割与同居期间居住权益协议范本
- 签订国际贸易合同时的汇率风险管理与法律应对
- 离婚财产分割补充协议涉及遗产继承权与分割调整
- 通信工程施工合同签订所需的技术标准及通信保障协议
- 2025年公共营养师三级考试试卷及答案
- 开工前安全培训教学课件
- 2025年皮肤科学常见皮肤病鉴别诊断练习试卷答案及解析
- 高铁隧道配套施工方案
- 足浴前台礼仪培训课件
- 三人合伙工程合同协议书
- 2025曲靖市事业单位定向招聘驻曲部队未就业随军家属(8人)备考练习试题及答案解析
- 2025广西现代物流集团第三次招聘109人笔试备考题库及答案解析
- 入住敬老院协议合同模板
- 急危重孕产妇的救治课件
- 家政服务企业社会责任报告样本
评论
0/150
提交评论