基于UML类图和顺序图的C++代码自动生成方法的研究
王晓宇;钱红兵
【摘 要】UML是一种被广泛用于软件系统需求分析和详细设计的标准建模语言,研究将UML描述的软件详细设计自动生成代码的技术可以大大加速软件产品的开发进度,提高软件的质量.提出一种将UML类图和顺序图相结合生成具有静态结构和动态行为信息的C++代码的方法,从而解决现在多数代码生成工具只能将静态图转换为C++代码框架而不能处理动态行为模型转换的问题.该方法包括UML类图和顺序图的元模型以及相应的转换规则.最后通过一个采用Velocity技术实现的代码生成器生成代码的实例描述了代码生成的具体过程及结果.%UML is a standard modelling language and is widely used in requirement analysis and high level design of software system. Research on the technology of generating C++ code automatically from high level software design depicted by UML can greatly accelerate the development process of software products and improve its quality. We propose an approach, which integrates UML class and sequence diagrams to form the C ++ code containing both the static structure and dynamic behaviour information of the software system, therefore solves the problems of the c
urrent code generation tools that they are only able to transform static diagrams to C + + code frame other than dealing with the transformation of dynamic behaviour models. This approach consists of meta models of UML class and sequence diagrams as well as the corresponding transformation rules. A case of code generation by code generator, which is realized by Velocity, is used to present the specific process and result of code generation.
【期刊名称】《计算机应用与软件》
【年(卷),期】2013(030)001
【总页数】6页(P190-195)
【关键词】UML;代码自动生成;元模型
【作 者】王晓宇;钱红兵
【作者单位】北京航空航天大学计算机学院 北京100191;北京航空航天大学计算机学院 北京100191
【正文语种】中 文
【中图分类】TP301
0 引言
在软件开发的过程中,开发人员总是重复编写一些简单的代码,而且每当新技术来临,又不得不一再地重复过去的工作。同时,需求的变化也从来没有停止过[1]。为了解决这些问题,人们提出了代码自动生成技术。代码自动生成技术根据模型驱动架构MDA(Model Driven Architecture)的思想,将由开发人员描述的软件系统模型转换为代码,使得模型成为软件开发的核心制品,提升了软件开发的抽象层次,从而提高软件开发效率和软件的可维护性[2]。
统一建模语言UML是一种以图形方式对系统进行分析、设计的标准建模语言,使用UML建模可以清晰地表示系统的结构和行为信息。UML模型中的类图显示了系统中各个类的静态结构,顺序图描述了对象之间消息传递的时间顺序。因此,软件开发人员通常将二者结合描述软件系统的详细设计模型。代码自动生成就以类图和顺序图为输入,依据一定的转换规则生成具有静态和动态信息的代码。
目前关于将UML模型图生成代码的研究很多,文献[3,4]提出了一种将类图和顺序图生成具有结构和行为信息的Java代码的方法,文献[5]列出了多条顺序图到Java代码的转换规则,文献[6]提出了一种将类图生成C++代码的方法,文献[7]提出了静态模型到C代码的转换规则,文献[8]提出了一种将类图生成.Net组件代码的方法,文献[9]研究了代码自动生成技术中代码信息的来源。但对如何结合类图和顺序图生成与完整应用系统相接近的C++代码的研究却比较少。
本文提出了一种将类图和顺序图相结合生成包括静态结构和动态行为信息的C++代码的方法。
1 转换方法
图1描述了由UML模型转换到C++代码的过程框架,包括UML模型、UML元模型、代码生成器以及C++代码。UML模型包括语法正确的类图和顺序图,用来描述软件系统的静态结构和业务逻辑信息,由编程人员绘制。UML元模型包括类图、顺序图的元模型,用来定义类图、顺序图的绘制规则。代码生成器的核心是代码转换规则,转换规则是根据UML模型元素的特点和C++语言的代码结构建立的。自动生成代码时,首先输入符合UML元模型规则的UML模
型,然后根据元模型的转换规则生成C++代码,其中类图生成C++中的类,顺序图生成方法内部的具体实现。
图1 UML到代码的转换方法
1.1 类图元模型
UML的元模型定义了使用UML描述对象模型的完整语法规则[10],图2为类图的元模型。UML类图中的类与元模型中的Class对应,属性和操作与Attribute和Operation对应。操作的参数对应Parameter,其中kind表示该参数的类型,若kind=in表示该参数为调用操作时传递的参数,kind=out则表示该参数为操作的返回值。各个类之间的关联关系用Association表示,AssociationEnd记录关联端的名称和属性。属性和参数的类型用Classifier表示。
图2 类图的元模型
1.2 顺序图元模型
图3为顺序图的元模型。一个顺序图用来描述类中的一个方法,对应元模型中的Interaction、
Collaboration和 Operation。其中Operation用来记录该顺序图所描述的方法的名称和可见性。顺序图中的对象对应元模型中的ClassifierRole,不同对象间通信的消息对应Message,消息中要执行的动作对应Action,该动作执行的条件用recurrence表示,动作的内容用Request表示。动作分为调用(CallAction)、创建(CreateAction)、发送(SendAction)、返回(ReturnAction)以及销毁(DestroyAction)。调用和创建操作的返回值用ReturnVar表示。参数的类型记录在Classifier中。
图3 顺序图的元模型
2 转换规则
下面介绍UML类图和顺序图到C++代码的转换规则。为了清楚准确地描述转换规则,UML模型元素使用文献[11]中定义的元素,转换规则中用到的标记如表1所示。转换规则使用表格描述,其中第一列为待转换的模型元素,第二列为该模型元素对应的元模型,第三列为该元模型对应的转换规则。
表1 转换规则中的标记列表标记类型 标记格式 标记说明 实例非终结符号 大写字母被相应的
规则替换,可以迭代使用ATTRIBUTE非终结符号 斜体小写字母 被UML模型中的数据替换c.name(符号“.”表示name是c的一个属性)终结符号 带下划线的符号规则中的不变部分,直接生成代码private:
2.1 类图的转换规则
依据UML模型和C++代码的特性,得出类图和C++代码的关系为:UML模型中的类、属性、操作分别对应C++中的类、成员变量、成员函数。因此,UML类图到C++代码的转换规则包括类的转换规则、属性和操作的转换规则。
uml图用什么软件画规则1 类的转换规则,如表2所示。待转换的模型元素是一个有名称的类,元模型中对象c的属性name记录了该类的名称。转换的第一步是.件(HFILE)和.cpp文件(CFILE)的生成,如表2转换规则第一行所示。.件包括头文件的引用INCLUDE、成员变量ATTRIBUTE和成员函数OPERATIONH的声明,被规则2中的内容替换。非终结符号c.name表示本规则所描述类的类名,被第一列中的类名所替换,语句#ifndef和#define后的c.name全部大写。在C++中,通常成员变量是私有的,成员函数是公有的,分别使用终结符号和描述,如转换规则第二行所示。.cpp文件包括对应头文件的引用和成员函数OPERATIONC的具体实现,如
转换规则第三行所示。
表2 类的转换规则模型元素 元模型 转换规则CLASS->HFILE CFILE HFILE-> #ifndef c.name_H_#define c.name_H_INCLUDE class c.name{〛private:ATTRIBUTE public:OPERATIONH};〛#endif CFILE->#include “c.name.h”OPERATIONC