




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
东南大学学位论文独创性声明 m 删舢m l l l l l l l l i i 川哪 y 1 7 6 13 0 4 本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成果。 尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过 的研究成果,也不包含为获得东南大学或其它教育机构的学位或证书而使用过的材料。与我 一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。 研究生签名: 雯! 堕 日 期:丝l 垒:鱼:乙 东南大学学位论文使用授权声明 东南大学、中国科学技术信息研究所、国家图书馆有权保留本人所送交学位论文的复印 件和电子文档,可以采用影印、缩印或其他复制手段保存论文。本人电子文档的内容和纸质 论文的内容相一致。除在保密期内的保密论文外,允许论文被查阅和借阅,可以公布( 包括 刊登) 论文的全部或部分内容。论文的公布( 包括刊登) 授权东南大学研究生院办理。 研究生签名: 翌! 睦 导师签名: 摘要 摘要 设计模式是有经验的面向对象设计者所总结的针对若干典型问题的经典解决方案,已经得到广泛的认 可和应用。从程序代码中自动地提取出设计模式有助于人们对程序的理解。设计模式必须符合一定的语法 特征,又必须实现一定的语义。现有研究中,人们主要面向结构信息、行为信息来提取设计模式,面向语 义信息提取设计模式的研究较少。本文以语义信息的分析、验证为出发点研究以j a v a 语言实现的设计模式 的提取技术。 状态模式中,不同的状态由不同的具体状态类表示。本文通过分析类型传播图得到环境类所引用的具 体状态类及这些具体状态类之间的转换关系,由此得到状态模式的状态转换图。文中给出了具体的算法。 接着本文利用p e t r i 网中的谓词变迁系统表达抽象语义的能力,设计了一种用于验证设计模式语义信息的 模型o v - p r 仃系统。分析表明o v - p 胛系统具有较强的语义表达能力,更利于验证设计模式的语义信 息。本文还对6 个设计模式构建了o v - p r 厂r 系统,并验证了它们的语义信息。 论文的工作包括以下几个方面:( 1 ) 深入分析状态模式的语义信息,依据状态模式中具体状态由抽象 状态类的各个子类表示的特点,在不同的状态下对环境类中表示当前状态的变量进行类型分析,提出一种 基于类型传播图恢复状态模式的状态转移图的算法:( 2 ) 分析了对象变量在一些设计模式中的语义特性, 并根据该特性参照类型传橘图,构建o v p r t 系统以j j 丁验证设计模式的语义信息,并接着详细地分析了 o v p r t 系统的语义验证能力。( 3 ) 对6 个设计模式构建了0 v p r t 系统,并分别讨论了如何验证它们的 语义信息。作为示例,对单件( s i n g l e t o n ) 模式进行了实例分析。 关键词:设计模式,类型传播图,o v p r t 系统 东南大学硕上学位论文 。- _ _ _ - - _ 。- _ - - - _ - _ - 。_ - 。_ _ _ 。- _ 。- _ _ _ _ _ i _ _ _ - _ _ _ - i _ - _ - - - - - _ _ - - - _ - _ _ - _ - _ _ - _ _ - _ i _ _ _ _ _ 。_ - - - _ - _ - - - - - _ _ _ - - _ _ - i - - _ _ - _ _ _ _ - _ _ 一 a b s t r a c t d e s i g np a _ t t e m sa 心an u m b e ro fc l a s s i c a ls o l u t i o n ss u m m a r i z e db ys o m ee x p e r i e n c e do b i e c t o r i e n t e d p r o 鲈舯m e r sf o rs o m et y p i c a lp r o b l e m s ,w h i c hh a v eb e e nw i d e l ya c c e p t e da n da p p l i e d r e c o v e r yo fd e s i g n p a 牡e m s 纳mt i l ec o d e sc 锄h e i pp e o p l et 0u n d e r s t a n dt h ep r o g r a i n s d e s i 朗p a t t e m ss h o u l dc o n f b 咖t os o m e 聊m a rc o n s t r a i n t s ,a n da c h i e v ec e n a i ns e m a n t i ce f f e c t s i nm o s to fe x i s t i n gr e s e a r c h e s ,p e o p l er e c o v e re l e m e n t s 0 fd e s i g np a t t e m sb ya n a l y z i n gs t r u c t u r e 锄db e h a v i o r t h e r ei ss e l d o m 肌yr e s e a r c hw h i c h 陀c o v e r se l e m e n t so f d e s i g np a t t e m sb ys e m a n t i c 锄a l y s i s i nt h ep a p e r ,t e c h n i q u e sa r ep r e s e n t e dt 0 r e c o v e 叮d e s i g np a t t e m s p r o 目锄m e dw i t hj a v ab ya j l a l y s i sa n dv e r i f i c a t i o no fs e m a n t i ci n f o 啪a t i o n i ns t a t ep a n e m ,d i f f e r e n ts t a t e sa r ee x p r e s s e db yd i f r e r e n tc o n c r e t es t a t ec l 弱s e s i nt h ep a p e r ,t h ec o n c 陀t e c l 弱s e so fs t a t eo b j e c t sr e f c r r e db yt h ec o n t e x tc l 弱so b j e c ta n dm et r a n s i t i o nb e t w e e nt h ec o n c r e t es t a t ec l 嬲s e sa r e r e v e a l e db y 锄a l y s i so ft y p ep r o p a g a t i o ng r a p h t h e na na l g o r i t h mi sp r e s e n t e dt or e c o v e r t h es t a t et r 觚s i t i o n g r a p ho fs t a t ep 雒e m t om a k eu s eo ft h ef a c u l t yt oe x p r e s sa b s t r a c ts e m a n t i c so fp r e d i c a t e ,t r a n s i t i o ns y s t e mo f p e t r in e t ,ac o n c r e t eo b j e c tv a r i a b l e - p r e d i c a t e t r a n s i t i o ns y s t e mi s d e s i g n e d t h eo b j e c tv a r i a b l e p r e d i c a t e t r 锄s i t i o ns y s t e mi sas e m a n t i ca n a l y s i sm o d e l ,a n dd i s c u s so ni ts h o w si th a ss t r o n gs e m a n t i ce x p r e s s i n ga b i l i t y , w h i c hh e l p ss e m a n t i ca n a l y s i s t h i sp a p e ra l s or e c o v e r ss e m a n t i cf e a t u r e so fs i xd e s i g np a _ c t e m sb yb u i l d i n g 踟d 锄a l y z i n go b j e c tv a r i a b l e p r e d i c a t e t r 锄s i t i o ns y s t e m so ft h e m t h em a i nc o n 仃i b u t i o n so ft h ep 印e ra r el i s t e da sf o l l o w s :( 1 ) a c c o r d i n gt 0t h ef 宅a t u r eo fs t a t ep a n e m , c o n c r e t es t a t e sc o u l db ee x p r e s s e d 笛t h es u b c l 弱s e so ft h ea b s t r a c ts t a t ec l 雏s ,a na l g o r i t h mb 弱e do na n a i y s i s0 f 钞p ep r o p a g a t i o n 可a p hi sp r e s e n t e dt or e c o v e rs t a t e 仃a n s i t i o ng r a p h 矗o mc o d e st h a ti m p l e m e n ts t a t ep a n e m ( 2 ) d i s c u s s i n gt h es e m a n t i cf e a t u r e so fo b j e c tv a r i a b l e si nd e s i g np a 钍e m s ,c o n s u l t i n gt h ec o n s t r u c t i o no ft y p e p r o p a g a t i o n 铲印h ,o b j e c tv 撕a b l e - p r e d i c a t e 腑锄s i t i o ns y s t e mi sp r e s e n t e dt 0a 1 1 a l y z es e m a n t i c so fo b j e c t v 耐a b l e si nt h ep 雅e m s ( 3 ) c o n c r e t eo b j e c tv a r i a b l e p r e d i c a t e t r a n s i t i o ns y s t e m sa r ec o n s t m c t e dt o 陀c o v e r s e m 卸t i cf e a t u r e s0 fs i xd e s i g np a t t e m s a n ds o m es i n g l e t o np a n e mi n s t a n c e s 盯eg i v e n 嬲c 嬲es t u d i e s k t i y w o r d s :d e s i g i lp a t t e m s ,t y p ep r o p a g a t i o ng r a p h ,o v - p 胛s y s t e m 目录 目录 摘 要i a b s t r a c t i i 目录i i i 第一章引言1 1 1 选题依据l 1 2 国内外研究现状1 1 3 主要研究内容。2 1 4 论文结构3 第二章设计模式提取概述4 2 1 设计模式简介。4 2 2 设计模式提取简介5 2 2 1 面向结构信息的设计模式提取6 2 2 2 基于行为信息的设计模式提取。7 2 2 3 基于语义信息的设计模式提取。9 2 3 本章小结1 0 第三章基于类型传播图从状态模式中恢复状态转移图ll 3 1 状态模式简介1 1 3 2 类犁传播图简介1 2 3 3 利用类型传播图恢复状态转移图1 4 3 4 实例分析15 3 5 利用状态转移图验证状态模式1 7 3 6 本章小结1 7 第四章构建o v - p l 厂r 系统验证语义信息。1 8 4 1 设计模式的语义信息1 8 4 1 1 设计模式中的对象变量18 4 1 2 语义验证模型的需要l8 4 2p e t r i 网简介1 9 4 3 构建o v - p r 仃系统2 0 4 3 1 构建变迁。2 l 4 3 2 构建谓词2 2 4 3 3 定义初始条件2 3 4 3 4 收集信息2 4 4 3 5 其他问题2 4 4 4 对o v p r 仃系统的分析和讨论2 4 4 5 本章小结2 6 第五章基于o v - p 仉1 系统提取设计模式2 7 5 1 基于o v - p r 仃系统验证语义信息的设计模式2 7 5 2 验证单件模式的语义信息2 7 5 3 验证生成器模式的语义信息3 1 5 4 验证享元模式的语义信息3 2 i i i 东南大学硕士学位论文 5 5 验证状态和策略模式的语义信息3 3 5 6 验证观察者模式的语义信息3 4 5 7 本章小结3 5 第六章总结和展望3 6 致谢3 7 参考文献。3 8 附录攻读硕士学位期间完成的论文列表4 0 i v 第一章引言 1 1 选题依据 第一章引言 随着软件行业的不断成熟和规范化,软件项目规模的日趋扩大,人们对软件设计与编码的质量提出了 更高的要求。人们总是希望开发的软件更利于维护、更便于扩展、更加健壮,因此在评判软件的好坏时, 软件的可复用性和灵活性成为了重要的评判项目。同时,由于设计高质量的面向对象软件并非易事,在进 行软件开发的时候,人们还希望更多地借鉴已有经验以增加开发质量并缩短开发周期。基于这两方面的需 求,一种以总结经验、提高软件质量为目的概念设计模式被正式提出。 设计模式是有经验的面向对象( o b j e c t - o r i e n t e d ) 设计者所总结的针对若干典型问题的一些经典解决 方案i lj 。最为经典的2 3 种设计模式在1 9 9 5 年经过e g a m m a 等人系统地总结之后得以推广,广泛应用于 面向对象的软件开发之中。2 3 种设计模式分别对应着2 3 类在软件开发中的常见问题,每一种都有独特的 应用环境以及模式行为。为了准确描述环境和行为,e g a m m a 等人在描述设计模式时同时采用了m 札类 图、自然语言、代码及伪代码等多种描述方式,从设计模式的动机、适用性和使用环境等多个层面阐述了 每一个设计模式的具体语义。这样,在程序注释或文档中出现的设计模式名就能让人们直接意会到软件设 计的意图和类之间的关系,方便对程序的理解。 然而在不少软件的文档中都缺少对软件设计意图、特别是关于模式使用的详细描述,这通常是由于编 码人员对此不够重视或者无法顾及太多细节。缺少这些信息,人们在理解软件的功能和结构时会有相当的 困难,也由此增加了后续者开发和维护的难度。当软件的规模、软件开发人员流动性较人时。这个问题显 得尤为严重。由于每个设计模式都曾被相关文献详细地描述,每一个模式都具有特定的语义,从代码中提 取设计模式可以帮助人们加深对软件的理解,降低软件维护的难度。另外,提取设计模式还可以支持软件 重构、并可以推动软件体系结构的识别、代码相似性分析等技术的研究。目前已有大量的研究人员对如何 从程序代码中提取设计模式的问题展开了研究。 提取设计模式需要从软件的源代码中挖掘并验证相关信息。设计模式有各类信息,都可以做为提取时 验证的标准。一般说来,验证的信息越全面,提取出来的类组合是某个设计模式的实例可能性越人、相应 的提取算法的查准率越高。其中一类信息是语义信息,常常表现了设计模式的关键设计意图以及模式中角 色行为的特殊之处,最能体现设计模式的实质。但由于语义信息比较抽象,要验证设计模式的语义信息并 不容易。目前,面向语义信息的提取技术还较少,已有的少数技术在验证时还存在着这样或者那样的局限 性。 在用i a v a 实现的设计模式实例中,对象变量具有特别的意义。因为设计模式重视对象之间的组合,设 计模式的角色又常用对象变量表示。本文在广泛调研的基础上,以分析、验证语义信息作为基本的研究出 发点,重点考察在设计模式中与各对象变量有关的语义特性,提出基丁静态分析的设计模式提取技术。 1 2 国内外研究现状 目前,国内外研究者已经提出多种提取设计模式的技术。从关注的角度上看,提取设计模式的技术关 注提取时采用的中间表示、是否实现自动化、是否实现图形化等多个方面,特别重点关注的方面是提取时 需要验证的信息。提取时需要验证的信息可以分为三类:结构信息、行为信息、语义信息。验证的顺序是 先结构,后行为,最后语义。提取时可选择单独验证其中一类信息,也可综合验证此三类信息。多层验证 可以提高设计模式提取的准确性。 ( 1 ) 面向结构信息的设计模式提取 面向结构信息的设计模式提取技术是三类提取技术中最为成熟的一类。结构信息通常是一些静态的语 法信息,如类名、方法名、方法参数的个数等。此类提取技术的差别主要体现在表示设计模式和源代码时, 所采用的中间表示有所不同,进而影响各个提取技术在时间复杂度、提取准确率上的著异。 最常用的源代码的中间表示是树形结构的a s t ( a b s t r - a c ts y n t a ) 【t r e e ) 【3 刮。例如,ga n t o n i a l 等人l 副 提出的一种基于三层限制的提取技术,该技术表示源代码时采用a s t 。在表示设计模式时也常采用树形结 1 东南大学硕士学位论文 构。例如,r f e r e n c 等人为设计模式定义了决策树【7 】而a b l e w i t t 等人则定义了规则树( p n o o f t r e e ) l 引。 有一些中间表示较为简单、便于优化,例如矩阵和向量。例如,j d o n g 等人使用矩阵作为中间表利卅。 j d o n g 等人用质数表示各类结构信息,用质数的乘积作为矩阵中的一个元素。这样,矩阵中一个元素就可 同时表示多种结构信息。该技术可以减少在验证结构信息时的计算量。o k a c z o r 等人采用点向量 ( b i t v e c t o r ) 作为中间表示,提出一种基于欧拉回路提高提取速度的技术【l o 】。 此外还有其他一些中间表示。如j n i e r e 等人设计的工具f u j a b a 使用a s g ( a b s t r a c ts y n t a ) 【g r 印h ) 作 为源代码和设计模式的中间表示。他们在a s g 上运用图再写技术匹配结构信息】。该技术采用自底向上 和自上而下相结合的算法,加速了提取过程。 ( 2 ) 面向行为信息的设计模式提取 现有研究中所涉及的行为信息验证主要集中在验证模式中各个角色之间的方法调用关系。t p e n g 等人 在验证行为信息时,引入一种匿名识别机制,解决了把源代码中的类名和方法名对应到模式的角色名和角 色中方法名的难题【1 2 】。d h e u z e r o t h 等人提出一种监控类执行的验证技术【4 1 。l w e n d e h a l s 等人通过手工 设置断点监控类的执行,并把记录的方法调用轨迹转换为序列图,将其与设计模式的标准序列图相匹配 【l3 l 。 ( 3 ) 面向语义信息的设计模式提取 设计模式的语义信息突出了设计模式的独特之处,是实现模式自身价值的根本,有诸如设计模式的设 计意图、应用设计模式的上下文环境、设计模式角色之间的行为等。目前,面向语义信息的设计模式提取 技术不多,研究者一般选择性地验证设计模式中的一些语义特征。 一些研究者企图识别出设计模式中一些具有语义的部件。a b l e w i t t 等人定义了具有弱语义的小模式 ( m i n i p a t t e m s ) 【8 】,如s 协t i cc o n s t m c t o r 等。设计模式中可用一到多个小模式。识别小模式是提取设计模 式的一部分。y g u 曲6 n e u c 等人虽然没有直接面向语义信息提取设计模式,但是他们详细分析了类之间表 示语义关联的关系如a s s o c i a t i o n 、a g g r e g a t i o n 等4 j 。 一些研究者在验证语义信息时,主要关注设计模式的一些外部特征。j d o n g 等人认为类名可体现出开 发者设计该类的意图。因此他们的验证技术把候选集中类的类名和设计模式中角色的角色名进行字符串匹 配1 9 1 。y g u 印6 n e u c 等人认为在设计模式的各个实例之间,存在一些相同或相似的外部特征,称为指纹 ( f i n g e r p r i n t ) 。他们提取模式的策略是寻找在源代码中,和已确认的设计模式实例具有相同或相似指纹的 类组合f 1 4 】。 一些研究者通过分析程序代码中的变量或代码结构验证设计模式的语义信息。例如,n s h i 等人以逆 向r = 程的视角把设计模式重新分为五类,在验证属于行为驱动模式的一类设计模式时,执行了数据流分析 1 6 】。 1 3 主要研究内容 本文以验证设计模式的语义信息作为基本的研究出发点。重点考察了程序代码中的对象变量在验证语 义信息的过程中发挥的作用,提出基于静态分析的设计模式提取技术。主要研究内容有: ( 1 ) 验证状态模式的核心语义。根据对状态模式的描述,可知其核心语义是,在程序运行时模式的 具体状态能够相互转换。因此,可从状态模式中恢复出状态转移图。在状态模式的环境类中,有一个声明 为抽象状态类的成员变量( 不妨设为c o n t e x t c u 仃e n t ) 引用一个表示当前状态的对象。在程序运行时,可 以通过改变c o n t e ) ( t c u 丌e n t 引用的对象,进而改变模式的具体状态。要确定当前状态的下一个状态,就需 要在表示当前状态的具体状态类中,分析出可能传递给c 0 n t e x t 。c u n e n t 的对象的类型。vs u n d a r e s 锄等人 定义的类型传播图可以帮助进行类型的分析,在类型传播图中收集各个具体类型可能传递给c 0 n t e x t c u r i e m 的类型,并根据这些类型恢复状态转移关系,进而恢复状态转移图。 ( 2 ) 介绍了设计模式的语义信息,指出了可通过分析与各对象变量有关的语义性质验证一些设计模 式的语义信息。设计模式语义信息的涉及面很j “。对一些设计模式而言,模式中的对象变量在最能表达模 式特点的角色行为中具有特殊意义。根据这些设计模式的描述,在执行角色行为后,某些关键的对象变量 所引用的对象会发生改变;执行角色行为前后,某些关键的对象变量所引用的对象需要发生指定的转变。 2 第一章引言 因此,可以构建一个模型在体现出模式中角色行为特征的基础上,通过静态分析对象变量验证语义信息。 针对这一点,本文提出构建一种o v p r t 系统用于验证模式的语义信息。 ( 3 ) 借助谓词变迁系统表达抽象语义的能力,参照类型传播图构建一种o v p r t 系统。首先把程序 中对象变簟之间的赋值关系改造为变迁,把对象变量改造为谓词。在改造变迁时,可根据实际需要对变迁 的发生条件进行限制:在改造谓词时,重点注意对n e w 结点和成员变量的改造。对其他一些影响角色行为 的冈素,可构建额外的辅助谓词和相对应的变迁,来增强0 v p r t 系统的语义表达能力。接着,为o v p r t 系统定义了初始条件,并讨论了在构建0 v p r t 系统时一些难点问题的处理方法。最后,对o v p r t 系统 进行了分析和讨论。 ( 4 ) 为6 个设计模式构建o v p r t 系统,通过分析o v p r t 系统验证语义信息,进而提取设计模式。 首先给出了适合基于o v p r t 系统验证语义信息的6 种模式,并简要介绍了它们的角色行为。接着对挑选 出的6 种模式,根据它们的角色行为分别为其构建了0 v p r t 系统,并给出了语义信息的验证条件。其中, 作为基于0 v p r t 系统验证语义信息的示例,对单件模式执行了较为详细的实例分析。 1 4 论文结构 论文主要由六章组成。第一章引言部分简要地介绍了论文t 作的选题背景、国内外研究现状和主要研 究内容。第二章概述了设计模式提取技术,简介了设计模式、设计模式提取的背景知识和现有的提取技术, 并重点对现有验证语义信息的技术进行了分析。第三章讨论了如何在类型传播图上验证状态模式的核心语 义,提出一个从状态模式恢复状态转移图的算法。第四章讨论了设计模式中对象变量的语义特征,指出了 可通过静态分析对象变量验证些设计模式的语义信息,借助谓词变迁系统表达抽象语义的能力,参考类 型传播图构建了一种o v - p 仉系统,并讨论了o v - p r 仃系统的一些特性。第五章对挑选出的6 个设计模式, 讨论了如何构建0 v - p r 厂r 系统以验证语义信息,进而提取设计模式。第六章总结全文并展望未来上作。 3 东南大学硕士学位论文 第二章设计模式提取概述 2 1 设计模式简介 面向对象编程是一种客观世界中的各种事物以对象组织、控制、交互的编程方式,自提出以来已经得 到广泛地研究和推广。以面向对象的观点分析和编写程序具有很多优点,例如更有利于程序的模块化,更 便下维护、更加灵活等等。人们可使用面向对象语言编写更加灵活、可重用性更高的软件。在当今的软件 行业中,一些主流的编程语言如j a v a ,c + + ,c 撑等均为面向对象语言。 但是,要设计和编写出一个高质量的面向对象软件却并非易事。在软件开发的过程中,如何组织类, 如何定制类与类之间的交互、各种语义关系等都需要程序员依据各种实际需要,进行认真地分析、考虑。 对一些问题的设计往往还需要进行多次迭代,才能找到最佳的解决方案。在不断探索最佳解决方案的过程 中,会消耗掉大量的时间。因此,出于质量和时间的需求,在设计和编写面向对象的软件时,人们希望能 更多地借鉴已有经验以增加开发质量并缩短开发周期。基于这样的要求,e g 锄m a 等人把在面向对象的 软件设计中,若干典型问题的一些经典解决方案作为设计模式记录下来。 设计模式一经被提出,就获得了广泛的应用,被迅速地推广开来。设计模式使得人们可以更简单、方 便地复用已有的成功设计;设计模式可以增加软件的灵活性、可重用性,提高软件的质量;设计模式可增 强人们对软件设计意图的理解:设计模式还可以用于重构、软件测试:总之,设计模式对软件行业产 生了巨人而深远的影响。 卜面以一个用j a v a 语言实现的f a c t o 呵m e t h o d 模式的实例为例,简单地解释下什么是设计模式以及使 用设计模式会达到怎样的效果。 程序2 1 一个返回多种产品的程序 程序2 2 对程序2 1 使用工j 方法模式重构后的程序 c l a s sd o c u m e n t c l a s sd o c u m e n t a p p l i c a t i o n 印p = n e wa p p l i c a t i o n ( ) ;a p p l i c a t i o na p p ; p r o d u c tg e t p r o d u c t ( i n ti d ) p r o d u c tg e t p r o d u c t ( ) r e t u mc r c a t e p r o d u c t ( i d ) ;r c t u mc r c 砷e p m d u 叫) ; c l 硒sa p p l i c a t i o n c l sa p p l i c a t i o n p r o d u c tc r e a t e p r o d u c “i n ti d ) a _ b s t r a c tp r o d u c tc r c a t e p r o d u c to ; i f ( i d 1 ) r e t u mc r e a t e p m d u c t lo ; i f ( i d 一2 ) c l 弱sa p p l i c a t i o n l r e t i l mc r c 砷e p r o d u c t 2 ( ) ;p r o d u c tc r c a t e p r o d u c t ( ) r c t u mn e wp r o d u c t l ( ) ; ) p r o d u c t lc r e a t e p r o d u c t l ( ) ) 佗t u mn e wp r o d u c t l ( ) ;c l 硒sa p p l i c a i i o n 2 ) p r o d u c tc r e a l e p r o d u c t ( ) p r o d u c t 2c r e a t ep r o d u c t 2 ( ) r c t u mn e wp 州u c t 2 ( ) ; 佗t i l mn e w p r o d u c 乜o ;) ) c l a s sp r o d u c t l 麟t d sp r o d u 叫 c l 笛sp r o d u c t le x t c n d sp r o d u c t c l 够sp m d u c t 2c x t c n d sp r o d u c t ) c i a s sp r o d u c t 2e x t e n d sp r o d u c t ) 考虑如下需求。应用类a p p i i c a t i o n 负责创建多个产品p r o d u c t ,用户类d o c 唧e n t 需要从a p p l i c a t i o n 中获取某个具体p r o d u c t 对象。根据应用环境的不同,d 0 c u m e n t 需求的具体p r o d u c t 不同( 即可能是p r o d u c t l , 4 第二章设计模式提取概述 可能是p r o d u c t 2 ) 。程序2 1 是满足该要求的一种代码实现,a p p l i c a t i o n 根据传入方法c r e a t e p r o d u c t ( ) 的i d 值决定返回哪一个具体p r o d u c t 的对象。此时,本应由d o c u m e n t 决定的对象创建条件没有对a p p l i c a t i o n 隐藏,这被认为是软件设计中的坏味道1 1 6 j 。选择采用f a c t o 巧m e t h o d 模式对d o c u m e n t 和a p p l i c a t i o n 进行 重构,重构后的代码如程序2 2 所示。此时,对具体p r o d u c t 的对象的创建j 二作被延迟到应用类a p p l i c a t i o n 的各个子类中。具体使用哪个a p p l i c a t i o n 的子类由d o c u m e n t 决定,a p p l i c “0 n 无需知道对象的创建条件, 消除了代码中的坏味道。另外,从类的体系结构来看,程序2 。2 的代码更简洁、更易扩展。 由于设计模式功能强大、效果明显,所以需要对其合理地描述,以便人们能够准确地把握和理解。要 描述好设计模式不是一件易事。在描述设计模式时,要注意体现出设计的意图、设计的上下文环境、各类 抽象的语义信息等,还要注意满足设计模式的灵活性,尽量不使用同定的代码实现去约束设计模式的某些 行为和语义。由此可见,设计模式是不可能只通过u m l 类图、程序代码就可以完整地描述出来的。e g a m m a 等人在描述为设计模式时,首先为模式定义了四个要素。熟悉这四个要素对理解和应用设计模式很重要。 四个要素分别是【1 1 :模式名称( p a t t e r nn a m e ) 、问题( p r o b l e m ) 、解决方案( s 0 1 u t i o n ) 、效果( c o n s e q u e n c e s ) 。 e g 锄m a 等人还从模式名和分类、意图、动机、结构等多个层面描述设计模式。常用的描述手段是 u m l 类图、u m l 序列图和代码示例。用u m l 类图可描述一些设计模式中基本的类体系结构信息,用i m , 序列图可描述一些如方法调用关系、任务委派等的行为信息,用代码示例则展示了模式的具体实现,可对 设计模式的意图、动机、上下文环境等诸多方面进行解释。因此,在提取设计模式时,这三种描述手段自 然成为关键地分析对象。 为了便于读者理解,e g 枷m a 等人还把2 3 种设计模式进行了分类。按照模式设计目的的不同,设计模 式被分为二类:创造型、结构型、行为型。创造型涉及对象的创建;结构型展现类或对象的组合方式:行 为型协调对象之间行为的交互和职责分配。按照模式所处理的是类之间的关系还是对象之间的关系分为类 模式和对象模式。类模式处理类和子类之间的关系,这些关系是静态的,在编译时即确定;对象模式处理 对象间的关系,这些关系是动态的。 2 2 设计模式提取简介 设计模式自从系统地被提出以来,已经在学术界和t 业界得到广泛的认可和大量的使用。在软件中应 用设计模式与否已经成为评价软件设计质量的一个重要角度。人们在设计模式提取方面已经进行了十多年 的研究。提取设计模式至少有如下几点好处: ( 1 ) 设计模式是正向j 1 :程( f o n v a r de n g i n e e r i n g ) 阶段的技术。当设计模式被应用到软件开发中之后, 原有的设计思路、设计技巧、设计细节等信息被隐藏在代码中。对于缺乏文档或文档不够详细的软件( 包 括人量网上流行的开源软件) ,隐藏于代码中的诸多设计信息很难再被跟踪。提取设计模式可以复现软件 中的设计信息。 ( 2 ) 软件设计时使用的软件体系结构( s o f h v a r ea r c h i t e c t u r e ) 过大,而最常用的建模t 具l 丌帆类图、 u m l 序列图又不能足够描述设计的意图。设计模式刚好可以提供这个设计的空隙。提取设计模式使得对 软件的理解更加衔接。 ( 3 ) 在提取出设计模式之后,即建立了程序代码中的类和设计模式的角色之间的对应关系。便于以 后依据角色信息( 角色行为、角色的继承关系等) 对程序进行维护或扩展。 ( 4 ) 提取的设计模式有助丁软件的维护、修改和复用,提取的设计模式也对重构、软件测试、软件 相似度等研究起借鉴意义。 要从程序代码中提取设计模式,首先要对设计模式建模,然后再执行从代码中提取的信息和设计模式 的信息之间的匹配。冯铁等人在分析人量提取设计模式的技术之后,把提取设计模式的流程总结为以下三 个步【1 7 l : ( 1 ) 对设计模式建模,产生设计模式的某种中间表示m 1 。 ( 2 ) 以查找设计模式为目的,分析软件系统的源代码,抽取源码信息模型m 2 。 ( 3 ) 比较m 1 和m 2 相似性,从而提取出源码中的设计模式实例。 在实际提取设计模式时,影响最终提取结果的因素很多,例如面向设计模式的哪些信息建模,使用什 么样的中间表示,如何定义类之间的各种关联关系等等。其中,面向设计模式的哪些信息建模最为关键, s 东南大学硕j :学位论文 直接决定了提取时的分析对象。本文在对设计模式的信息归类时,采用j d o n g 等人的归类法1 2 j ,把设计模 式中的信息划分为三类:结构信息,行为信息,语义信息。以下分别介绍现有面向这三类信息提取设计模 式的技术。 值得注意的是,对三类信息的验证并不是完全独立的三个不同的研究方向,对信息分类的目的只是为 了突出提取技术研究的着重点。对结构信息的验证是提取设计模式的基础,几乎所有的提取技术都需要基 于验证结构信息后之上。在验证结构信息之后,可增加对行为信息,或更进一步对语义信息的验证,其目 的是提高提取结果的精度,排除更多误例。 2 2 1 面向结构信息的设计模式提取 结构信息是设计模式最基础的信息,是对设计模式的类体系结构的一些要求,主要包括一些在对程序 代码编译时即可确定的静态的语法信息。虽然不同研究者定义的结构信息可能略有一些不同,但常见的结 构信息主要包括以下三类: ( 1 ) 设计模式中各个角色的类名,类成员变量名,类中的方法名以及作用于它们的访问指示符、常 量指示符等关键字。 ( 2 ) 设计模式中的方法的参数类型、参数个数、返回值类型,类中的各个成员变量的类型、各个类 型的变量的个数。 ( 3 ) 类之间的关系,对象之间的关系。包括类与类之间的继承关系、类中成员对象之间的雒s o c i a t i o n 关系、a g g r e g a t i o n 关系、c o m p o s i t i o n 关系等。 目前,面向结构信息的设计模式提取技术已比较成熟,已有不少研究者实现了提取:l j 具,其中较出名 的工具有p a t 【1 引,d p + + 【1 引,j b o o r e t 【2 们,c r o c o p a t 【2 n ,d p r e 【2 2 - 2 引,s p q r 【2 刖,f u j a b a 【1 ,h e d g e h o 一引, d e m i m a 【1 4 】等。现有技术在验证结构信息时,重点解决如何更快、更准确地提取设计模式。各种提取技术 在表示设计模式和源代码时,所采用的中间表示是它们之间的主要差别。这种差别延续地影响到提取技术 的时间复杂度、提取的策略以及其他的一些优化措施。 ga n t o n i a l 等人早在1 9 9 8 年就提出了一种基于三层限制的设计模式提取技术p j 。首先,给出度量约束 ( m e t r i c sc o n s t r a i n t s ) ,对源代码中类的成员变量、类之间关系等的个数进行约束:然后,给出结构约束 ( s t m c t u r a lc o n s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电力设备预防性验及维护合同8篇
- 购销合同范本模板5篇
- 浆细胞瘤模型构建方法优化-洞察及研究
- 肾间质纤维化研究-洞察及研究
- 肩关节盂肱关节囊再生技术进展-洞察及研究
- 菜单策略与顾客满意度关联-洞察及研究
- 新型塑料家具环保性能研究-洞察及研究
- 肝动脉栓塞术治疗肝癌的长期效果-洞察及研究
- 数字孪生在石材加工工艺优化中的应用-洞察及研究
- 免疫缺陷基因表达谱分析-洞察及研究
- 广东省2025年度初级注册安全工程师职业资格考试金属非金属矿山安全复习题及答案
- 十二经络课件
- Starter Unit 3 Welcome 单元测试(含答案)人教版(2024)七年级英语上册
- 玻璃委托代加工合同范本
- 年产9000吨塑料粒子项目报告表
- 秦朝服饰设计分享
- 子宫脱垂的中医护理查房
- 2024年12月英语四级真题及答案-第1套
- 大学生禁毒知识竞赛题库题及答案
- 2024年高校教师资格证考试题库(各地真题)
- 病房抢救室工作制度
评论
0/150
提交评论