基于OOAPN模型的代码逆向生成*

2014-09-03 10:51李金友于江涛
通化师范学院学报 2014年1期
关键词:面向对象逆向代码

李金友,于江涛

(通化师范学院 计算机学院,吉林 通化 134002)

基于OOAPN模型的代码逆向生成*

李金友,于江涛

(通化师范学院 计算机学院,吉林 通化 134002)

基于OOAPN模型的代码逆向生成旨在为人们利用自定义的模式,匹配出符合要求的格式数据,再经过逆向代码生成器的加工转换,使其转变成符合nameSpace数据结构类型的数据,再由CIL加工还原成OOAPN模型.

OOAPN模型;模型驱动; 模板引擎;逆向代码生成

Petri网(PetriNet)是一种高效的建模和分析工具,近年来得到了快速的发展.但是Petri网是一种纯理论工具,并不能适合所有领域的应用需求.很多学者针对不同领域的研究对象,提出了各种各样改进的Petri网理论.如近年来得到普遍应用的随机Petri网、着色Petri网、模糊Petri网、代数Petri网、面向对象Petri网和面向对象代数Petri网模型等.

面向对象代数Petri网模型OOAPN(ObjectOrientedPetriNet)模型支持面向对象的概念,支持面向对象软件系统分析和建模,把代数理论、Petri理论以及面向对象方法和技术结合在一起,为形式化和智能化软件工程环境的建立提供了一种有效方法,可以提高并发系统动态建模和复杂系统的高级建模的能力,实现系统的动态建模和不确定建模,完善现有建模方法的不足.

1 OOAPN模型建模工具系统分析

OOAPN模型建模工具旨在为人们提供一套科学的工程化的软件开发工具系统,有效的管理分析、设计、编码和测试的全过程,生成高效、正确的代码.集成化思想与建模工具紧密地结合在一起,形成了具有强有力的逆向代码自动生成的可编程和测试的集成化建模工具.OOAPN建模工具主要作用有:一个具有专用资源和早期查错功能的交互式开发环境、对软件的开发和维护过程中的许多环节实现了自动化、通过一个强有力的图形接口,实现了直观的程序设计.

基于OOAPN模型的建模工具,提出了模型驱动模板MDT(ModelDrivenTemplate)设计模式.模型驱动模板MDT(ModelDrivenTemplate)设计模式主要包含两个要素:模型和模板.而这两个要素都是抽象的,即在实际开发中,可根据需要采用不同的模型和模板.在建模系统中,模型采用的是OOAPN模型,模板采用的是CheetahTemplates模板引擎,在中心信息库CIL(CenterInformationLibrary)中,用逆向代码生成器,利用自定义的模式,匹配出符合要求的格式数据,再经过逆向代码生成器的加工转换,使其转变成符合nameSpace数据结构类型的数据,再由CIL加工厂还原成OOAPN模型.系统运行界面如图1所示.

图1 是系统运行的界面

2 逆向代码自动生成过程

逆向代码的自动生成的主要构件是正则表达式,利用自定义的模式,匹配出符合要求的格式数据,再经过逆向代码生成器的加工转换,使其转变成符合nameSpace数据结构类型的数据,再由CIL加工厂还原成OOAPN模型.其系统结构图如图2所示:

图2 逆向代码自动生成过程

3 逆向代码自动生成实现

首先,构造自定义的正则模式,以便匹配出符合要求的代码,进行下一步的转换.如自定义的匹配函数(方法、事件)的正则模式:

#匹配表达式

patFunction=r"""

([^s]+s*|) # 函数返回值类型

([^s]+)# 函数名称

s* # 空字符

( # 参数的左界

(s* # 空字符

([^s]+s*|)* # 参数类型

(([^s]+))* # 参数名称

(,)* # 参数分隔符

)* # 多个参数

) # 参数的右界

s* # 空字符

; # 结束符

"""

其次,由逆向代码生成器转换成类型nameSpace数据结构类型的数据.如向一个已经匹配的接口添加函数(方法、事件):

FunctionText=MatchesText[BreakText[BreakTextLen-1]["InterfaceStartPos"]:]

rFunction=re.compile(patFunction,re.VERBOSE) #Compileit

FunctionIterator=rFunction.finditer(FunctionText) #Matches

formatchFunctioninFunctionIterator:

FunText=matchFunction.group(0) #函数体

FunType=matchFunction.group(1) #函数返回值类型

FunName=matchFunction.group(2) #函数名称

FunArgs= [] #函数的参数列表

ArgsText=FunText[FunText.find("(")+1:FunText.find(")")]

ArgsList=ArgsText.split(",")

forArginArgsList:

ArgText=string.strip(Arg)

ArgList=ArgText.split(" ")

iflen(ArgList) == 2 :

FunArgs.append({'FunArgType':ArgList[0],'FunArgName':ArgList[1]})

InterfaceDict["Functions"].append(

{'FunType':FunType,'FunName':FunName,'FunArgs':FunArgs})

再次,由中心信息库CIL(CenterInformationLibrary)对nameSpace加工转换成OOAPN模型.如向已经在画布存在的接口图形的一个函数添加参数模型:

forArgIndexinrange(ArgCount) :

TEM_ARG_POS_X=TEM_FUN_POS_X-39

TEM_ARG_POS_Y=TEM_FUN_POS_Y

ifArgIndex== 0andArgCount== 2:

TEM_ARG_POS_X=TEM_FUN_POS_X-39

TEM_ARG_POS_Y=TEM_FUN_POS_Y-20

elifArgIndex== 1andArgCount== 2:

TEM_ARG_POS_X=TEM_FUN_POS_X-39

TEM_ARG_POS_Y=TEM_FUN_POS_Y+20

objPlaceShape=PlaceShape()

dc=wx.ClientDC(canvas)

objPlaceShapeNewSID=self.OnGetCunSID()

objPlaceShape.SID=objPlaceShapeNewSID

objPlaceShape.PlaceShapeFrame.SID="Frame"+str(objPlaceShapeNewSID)

objPlaceShape.Type="PlaceInInterfaceShape"

objPlaceShape.Move(dc,TEM_ARG_POS_X,TEM_ARG_POS_Y)

evthandler=MyEvtHandler(self,objPlaceShape)

evthandler.SetShape(objPlaceShape)

evthandler.SetPreviousHandler(objPlaceShape.GetEventHandler())

objPlaceShape.SetEventHandler(evthandler)

objPlaceShape.AttName=nameSpace["Interfaces"][InterfaceIndex]

["Functions"][FunIndex]["FunArgs"][ArgIndex]["FunArgName"]

objPlaceShape.AttType=nameSpace["Interfaces"][InterfaceIndex]

["Functions"][FunIndex]["FunArgs"][ArgIndex]["FunArgType"]

objInterfaceShape.AddChild(objPlaceShape)

diagram.ShowAll(1)

canvas.Redraw(dc)

canvas.Refresh()

最后,由中心信息库CIL(CenterInformationLibrary)对nameSpace加工转换成有效的OOAPN模型.

4 结语

集成化思想与建模工具紧密地结合在一起,形成了具有强有力的逆向代码自动生成的可编程和测试的集成化建模工具,有效的管理分析、设计、编码和测试的全过程,生成高效、正确的模型.

[1]潘洪军.面向对象代数Petri网[J].吉林大学学报,2006(3).

[2]克莱普,等著.解析MDA[M]. 鲍志云,译.人民邮电出版社,2004.

[3]袁崇义.Petri网原理与应用[M].北京:电子工业出版社,1998.

[4]贾立新,薛钧义,茹峰.采用模糊Petri网的形式化推理算法及其应用[J].西安交通大学学报,2003(12).

[5]丛佩政,任爱华.基于面向对象Petri网的模型驱动开发方法的研究[J].微计算机信息,2006(28).

(责任编辑:王前)

Reverse Code Generation Based on OOAPN Model

LI Jin-you, YU Jiang-tao

(CollegeofComputerScience,TonghuaNormalUniversity,Tonghua,Jilin134002,China)

The reverse code generation based on the OOAPN model aims to use the custom pattern, matching the format data to meet the requirements, and through the processing conversion of reverse code generator to convert it into data in compliance with nameSpace data structure types, then by CIL processing revert to OOAPN model.

OOAPN model; model-driven; template engine; reverse code generation

2013-10-07

李金友(1972-),男,吉林通化人,硕士,副教授.

吉教科合字[2007]第216号.

TP

A

1008-7974(2014)01-0040-03

猜你喜欢
面向对象逆向代码
逆向而行
逆向思维天地宽
面向对象方法在水蓄冷PLC编程中应用分析
创世代码
创世代码
创世代码
创世代码
基于面向对象的车辆管理软件的研制与开发
面向对象的SoS体系结构建模方法及应用