发明名称 一种基于子模式的GoF设计模式实例挖掘方法
摘要 本发明公开了一种基于子模式的GoF设计模式实例挖掘方法。本发明从GoF定义的23种设计模式的中提取相同的、更易于挖掘的结构——子模式,并使用子模式定义23种设计模式的结构特征模型;使用类关系有向图表示软件系统和子模式,在此基础上利用图同构算法从表示软件系统的类关系有向图中挖掘子模式实例,然后按照设计模式结构特征模型的定义,使用连接类合并特定的子模式实例以生成设计模式实例。本发明中的子模式由于比较简单因此其实例更容易被探测到,同时使用连接类组合不同的子模式实例减少了搜索空间。
申请公布号 CN104573084A 申请公布日期 2015.04.29
申请号 CN201510044072.0 申请日期 2015.01.28
申请人 杭州电子科技大学 发明人 俞东进;张艳艳;陈真理;王杰
分类号 G06F17/30(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 浙江杭州金通专利事务所有限公司 33100 代理人 王佳健
主权项 一种基于子模式的GoF设计模式实例挖掘方法,其特征在于该方法的具体步骤是:步骤(1).定义子模式代表一组类和这组类之间关系,用一个二元组表示,即<img file="dest_path_image001.GIF" wi="201" he="23" />,其中<img file="18040dest_path_image002.GIF" wi="84" he="24" />代表子模式中的这组类,<img file="dest_path_image003.GIF" wi="15" he="16" />代表这组类之间的关系,<img file="729644dest_path_image004.GIF" wi="372" he="35" />,inherit表示继承,agg表示聚合,ass表示关联,dep表示依赖;步骤(2).使用子模式定义23种GoF设计模式的结构特征模型SFM,它是由一系列相关的子模式连接组成,用于表征某一种特定的设计模式的结构特征,即<img file="dest_path_image005.GIF" wi="268" he="26" />,其中<img file="453886dest_path_image006.GIF" wi="139" he="32" />表示通过连接类<img file="dest_path_image007.GIF" wi="73" he="22" />连接而成的两个子模式<img file="61585dest_path_image008.GIF" wi="29" he="32" />和<img file="dest_path_image009.GIF" wi="29" he="26" />的组合,即<img file="723642dest_path_image010.GIF" wi="477" he="31" />,<img file="dest_path_image011.GIF" wi="95" he="27" />和<img file="707778dest_path_image012.GIF" wi="95" he="27" />分别表示子模式<img file="693052dest_path_image008.GIF" wi="29" he="32" />和<img file="596286dest_path_image009.GIF" wi="29" he="32" />包含的类集合;步骤(3).将软件系统、子模式分别使用类关系有向图<img file="dest_path_image013.GIF" wi="49" he="17" />表示,即用三元组表示为<img file="401431dest_path_image014.GIF" wi="139" he="32" />,其中:<img file="dest_path_image015.GIF" wi="145" he="22" />表示类关系有向图中顶点的集合,代表所有的类,<img file="923679dest_path_image016.GIF" wi="181" he="27" />表示类关系有向图中边的集合,表示类与类之间具有继承、聚合、关联、依赖关系,<img file="dest_path_image017.GIF" wi="69" he="28" />给以<img file="107667dest_path_image018.GIF" wi="16" he="24" />为起点和以<img file="dest_path_image019.GIF" wi="17" he="20" />为终点的每条边赋予一个权值,表示边的起点<img file="57168dest_path_image018.GIF" wi="16" he="24" />和终点<img file="615189dest_path_image019.GIF" wi="16" he="32" />对应的两个类<img file="800182dest_path_image020.GIF" wi="15" he="17" />和<img file="dest_path_image021.GIF" wi="15" he="18" />之间的关系,其值分别用2、3、5、7或者它们的乘积表示;若<img file="760048dest_path_image022.GIF" wi="124" he="30" />,那么<img file="880451dest_path_image017.GIF" wi="69" he="29" />=<img file="dest_path_image023.GIF" wi="12" he="17" />;若<img file="4396dest_path_image024.GIF" wi="153" he="32" />,那么<img file="399605dest_path_image017.GIF" wi="69" he="32" />=<img file="dest_path_image025.GIF" wi="12" he="15" />;若<img file="682819dest_path_image026.GIF" wi="125" he="32" />,那么<img file="505281dest_path_image017.GIF" wi="69" he="32" />=<img file="dest_path_image027.GIF" wi="12" he="16" />;若<img file="365790dest_path_image028.GIF" wi="128" he="32" />,那么<img file="564690dest_path_image017.GIF" wi="69" he="32" />=<img file="dest_path_image029.GIF" wi="12" he="15" />;若两个类之间拥有多种关系,那么使用不同关系对应的权值的乘积表示这两个类之间的关系;步骤(4).首先,从软件系统的类关系有向图中找出每个子模式的类关系有向图中每个顶点的参与类候选集,其中表示参与类的顶点的入边和出边的权值能分别整除子模式的类关系有向图中对应顶点的入边和出边的权值;接着,从每个参与类候选集中任意选出一个顶点,将这些顶点以及在软件系统的类关系有向图中相应的边,组合成子图;最后,判断该子图是否与相应的子模式的类关系有向图同构,若同构,将其添加到相应的子模式实例集合中;步骤(5).对于每种GoF设计模式遍历其结构特征模型SFM中的每一个<img file="702410dest_path_image030.GIF" wi="41" he="32" />,首先在步骤(4)得到的子模式实例中选择两个与组成该结构特征模型<img file="37052dest_path_image030.GIF" wi="41" he="32" />的子模式一致的子模式实例进行组合,并检查它们是否具有与组成该结构特征模型<img file="791382dest_path_image030.GIF" wi="41" he="20" />的子模式一致的连接类<img file="793973dest_path_image007.GIF" wi="73" he="23" />,如果没有相应的子模式实例或者这两个子模式实例之间不存在连接类<img file="786200dest_path_image007.GIF" wi="73" he="20" />,则舍弃;否则,则将这两个子模式实例组合后添加到该设计模式实例集合中。
地址 310018 浙江省杭州市下沙高教园区2号大街