基于类图和活动图相结合生成c++代码的方法

文档序号:6402053阅读:364来源:国知局
专利名称:基于类图和活动图相结合生成c++代码的方法
技术领域
本发明涉及一种软件代码自动生成领域,具体涉及一种基于类图和活动图结合生成C++代码的方法。
背景技术
当今随着电子计算机技术的快速进步,互连网络Internet与计算机相连接,使今天的信息社会进入了以计算机为核心的时代。在信息社会中,信息的处理、获取、决策和交流都需要许多高性能的软件架构,因而就促使人们对计算机软件的功能、质量、品种、数量、开发和成本时间等提出越来越高的需求,而人们对各种软件开发方法也进行着深入的学习。但不幸的是,若要使计算机的软件功能变得越全面、使用越便捷,必然将使开发出的软件越巨大、越复杂,这样极大地挫伤了人们的积极性,以致开发软件的成本翻倍增长、开发周期不断向后拖延,最终难以保证软件质量。而在这些问题中,项目严重超期无疑是软件开发中的致命打击,一些调查表明,70%的项目超出了估算的时间,大型项目平均超出计划交付时间的20%到50%,项目越大,超出计划的时间越长,很多学者认为软件开发的问题主要在于开发的速率。那怎么才能在保证软件质量的同时又缩短开发周期呢?使用MDA开发软件时,代码生成可以很好的消除之前提出的问题。代码生成主要是区别于传统的由程序员手工进行的编程,它可以从一些文件、模型、数据信息直接转化为可运行的代码。代码生成器的工作原理如下:首先输入一个抽象业务模型(例如UML模型),然后通过映射规则确定的模板生成基于该模型的代码文件。现阶段,代码生成方法有很多,主要包括以下四种方法:基于对象关系的、基于契约的、基于模型的、基于模板的。其中:1、基于对象关系的代码生成该类技术主要是基于面向对象和关系数据库技术的结合体。已经被许多大型的厂商所支持,例如!Microsoft的.Net框架、IBM的Websphere服务框架、Java的众多开源框架(Hibernate、Ejb、Spring等)。这种技术往往使用比较方便,因为软件体系已经在内部封装了许多功能,对外向用户只是提供了少量的接口,编程人员容易掌握。其中,Hibernate是对 JDBC (Java Database Connectivity)数据库技术进行了轻量级的对象封装,从而能使开发人员能够更加方便地编写操作各种类型数据库的代码;Spring是一个轻量级的业务逻辑开发框架,只需少量编程就可以完成Ejb的许多功能,该框架的关键之处就是可以自动生成业务逻辑代码;还有一种企业应用软件ESA(EnterpriseSoftware and Applications)由于必须具备快速重构的能力,往往利用日志(Log)来记录对象间关联关系与业务对象,从而在业务对象模型发生变化后,可以迅速的比对之前的对象模型并快速地自动生成代码。该技术优点在于技术比较成熟,掌握以后比较容易使用。缺点在于生成代码的性
能略差一些。
2、基于契约的代码生成面向方面编程(Aspect-Oriented Programming, A0P)是一种新兴的编程方法,其立足点在于关注点的分离。在AOP的概念中,软件系统由多个关注点组成,其中一部分关注点与系统的业务逻辑相关,被称为“主关注点”,而其他的关注点则普遍存在于系统各个组件中,称为“横切关注点”。AspectJ是对Java语言的一种扩展,它在语言层面实现了 AOP语言规范。契约式设计(Design by Contract, DbC)现在已成为广泛使用的用于提高系统可靠性的方法。该技术优点在于生成的代码与语言比较吻合,可直接用于二次开发。缺点在于只能生成接口,不生成可运行代码。3、基于模型的代码生成该技术往往把将要实现的软件系统抽象为模型,然后通过模型到代码的映射规则来自动生成代码。其中,建立模型属于软件开发的设计阶段,代码生成属于编码阶段,从而完成设计与实现一体化的无缝集成。该类技术最为知名的是MDA技术。此外,模型还可以是流程图,该方法首先对流程图中所包含的关系和含义进行解析,将它们分解为判断嵌套关系、顺序执行关系、跳转关系和循环关系,然后根据对应的关系进行代码自动生成;基于模型用户界面的代码生成用模型来定义界面中的所有元素,这种开发方式的好处是:以用户为中心缩短了开发周期,集中了用户界面的规范使各种生成代码可以兼容,可以实现界面模型和代码的交互编程,并且,用户界面的设计和代码可以重复利用。该技术优点在于模型简单直观,易于对软件系统进行刻画;系统设计与模型视图的开发同步,项目集成度较高。缺点在于设计出模型之后多了一层编译过程,代码运行效率较低。4、基于模板的代码生成模板技术类似编程语言中的泛型编程,C++的STL(Standard Template Library)库就相当于一些模板,把一些经常使用的、可变的代码编制成为文档代码,待需要时,根据极少的参数变量,生成通用的可执行的代码。在模板技术中,往往将不变的部分称之为模板(Template),将可变的部分称之为模型(Model),让二者合并的部分是模板引擎,模板引擎的输入是模型和模板,输出即是自动生成的代码。XSLT将模型转换为代码,它分离了模型与转换规则,这样二者可以单独改变而不影响对方。XSLT可以将XML文档转换成为其它XML文档、HTML文档或者其它编程语言。Velocity是当今比较流行的基于模板代码生成的利器,它允许用户自定义一套模板,然后根据用户提供的生成信息数据,就可以快速地生成用户所需要的任何类型的源代码。该技术优点在于生成代码风格统一,易于复用;代码运行效率取决于模板的编写,好的模板可极大提高代码运行效率。缺点在于模板引擎的输入信息较难获取。

发明内容
本发明的目的在于克服上述已有技术的不足,并结合已有技术的优点,提供一种有效的代码自动生成技术,以解决现阶段软件开发效率低下的问题。从现有技术的优缺点可以看出,基于模型的与基于模板的代码生成技术的优缺点在很多方面是互补的。例如:基于模型的技术获取软件系统的信息比较简单,而基于模板的技术往往难以获取有效的信息;基于模板的技术可以在代码生成之前对模板进行反复推敲设计,使生成代码运行效率极高,这正好可以弥补基于模型技术的代码运行效率较低的缺点。因此,本发明的代码生成技术将结合二者的优点,以基于模板的技术为框架,模板引擎的输入信息选择基于模型技术中的类图和活动图,这样就形成了基于类图和活动图的模板代码生成技术。为了实现上述目的,本发明采用的技术方案如下:一种基于类图和活动图相结合生成C++代码的方法,包括用于输出自动生成代码的模板引擎,所述方法包括以下步骤:将用例图转换为类图和活动图,所述用例图描述了一组参与者、用例以及前两者之间的链接关系,根据所述用例图中的对该用例的描述、前置条件、后置条件、控制流等信息,生成所述类图和所述活动图,其中,一个用例图可以生成多个类图和活动图,且所述类图和所述活动图是一一对应的所述类图是对该用例的静态信息的描述,所述活动图是对该用例的动态信息的描述;(2)制定类图和活动图到C++代码的映射规则,所述映射规则包括将所述活动图中的活动对应生成类,活动变迁相关的事件和函数对应生成类的方法;为所述活动图生成一个RootContext类,其中,该类是外界调用所述活动图中事件函数的惟一接口 ;设置一个AbsRootContext抽象类,其中,该抽象类作为所述RootContext类访问所述活动图中具体活动的接口;(3 )通过模板弓丨擎生成模板代码,将所述类图与所述活动图结合,在所述模板弓I擎的输入信息选择基于素数的类型和活动图,然后通过所述模板引擎生成模板代码。需要说明的是,所述活动图中的每一个活动均继承于AbsRootContext类,在活动类中完成与该活动相关的变迁函数的实现。作为一种优选的方案,所述活动图刻画类图信息时,将所述活动图中活动之间的变迁函数选择为所述类图中的方法。利用上述方法所生成C++的代码结构,所述活动图生成的代码放在一个文件夹下面,向外部设有RootContext类作为访问的接口,所述类图生成的代码中设有一个所述类图对应的活动图生成代码中RootContext类的对象context。作为一种优选的方案,所述访问接口数量为I个。需要说明的是,对类图中每一个方法进行判定:如果该方法作为了活动图中变迁事件函数,则在类图中该方法函数体中就调用context对象对应的该方法,否则就不调用。需要进一步说明的是,C++语言是面向对象的语言,因此,它支持类图中的语义概念,比如:类、继承、实现、接口等,但是活动图中的许多概念,比如:活动、分支、分叉、控制流等,在C++中并没有体现,所以,在本方法中建立了上述一种从活动图到C++代码的映射规则。本发明有益效果在于:同时具备基于模型的与基于模板的代码生成技术的优点,不但获取软件系统的信息比较简单,而且可以在代码生成之前对模板进行反复推敲设计,使生成代码运行效率极高。


图1为本发明代码生成方法流程图。图2为本发明的类图和活动图结合方法图。
具体实施例方式下面将结合附图对本发明作进一步的描述。如图1所示,本发明为一种基于类图和活动图相结合生成C++代码的方法,包括用于输出自动生成代码的模板引擎,所述方法包括以下步骤:( I)将用例图转换为类图和活动图,所述用例图描述了 一组参与者、用例以及前两者之间的链接关系,根据所述用例图中的对该用例的描述、前置条件、后置条件、控制流等信息,生成所述类图和所述活动图,其中,一个用例图可以生成多个类图和活动图,且所述类图和所述活动图是一一对应的所述类图是对该用例的静态信息的描述,所述活动图是对该用例的动态信息的描述;(2)类图和活动图到C++代码的映射规则,所述映射规则包括将所述活动图中的活动对应生成类,活动变迁相关的事件和函数对应生成类的方法;为所述活动图生成一个RootContext类,其中,该类是外界调用所述活动图中事件函数的惟一接口 ;设置一个AbsRootContext抽象类,其中,该抽象类作为所述RootContext类访问所述活动图中具体活动的接口 ;所述活动图中的每一个活动均继承于AbsRootContext类,在活动类中完成与该活动相关的变迁函数的实现。(3)通过模板引擎生成模板代码,将所述类图与所述活动图结合,在所述模板引擎的输入信息选择基于所述的类图和活动图,然后通过所述模板引擎生成模板代码。如图2所示,本发明中的类图和活动图的结合方式是,在用例图生成类图和活动图时,类图和活动图是一一对应的,为了使活动图更好地刻画类图的信息,可以将活动图中活动之间的变迁函数选择为类图中的方法,因此,类图的信息就可以通过活动图的动态性更好地表达。利用上述方法所生成C++的代码结构,所述活动图生成的代码放在一个文件夹下面,向外部设有RootContext类作为访问的接口,所述类图生成的代码中设有一个所述类图对应的活动图生成代码中RootContext类的对象context,所述访问接口数量为I个。需要说明的是,对类图中每一个方法进行判定:如果该方法作为了活动图中变迁事件函数,则在类图中该方法函数体中就调用context对象对应的该方法,否则就不调用。对于本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及变形,而所有的这些改变以及变形都应该属于本发明权利要求的保护范围之内。
权利要求
1.一种基于类图和活动图相结合生成C++代码的方法,包括用于输出自动生成代码的模板引擎,其特征在于,所述方法包括以下步骤: (1)将用例图转换为类图和活动图,所述用例图描述了一组参与者、用例以及前两者之间的链接关系,根据所述用例图中的对该用例的描述、前置条件、后置条件、控制流等信息,生成所述类图和所述活动图,其中,一个用例图可以生成多个类图和活动图,且所述类图和所述活动图是一一对应的所述类图是对该用例的静态信息的描述,所述活动图是对该用例的动态信息的描述; (2)制定类图和活动图到C++代码的映射规则,所述映射规则包括将所述活动图中的活动对应生成类,活动变迁相关的事件和函数对应生成类的方法;为所述活动图生成一个RootContext类,其中,该类是外界调用所述活动图中事件函数的惟一接口 ;设置一个AbsRootContext抽象类,其中,该抽象类作为所述RootContext类访问所述活动图中具体活动的接口; (3)通过模板引擎生成模板代码,将所述类图与所述活动图结合,在所述模板引擎的输入信息选择基于所述的类型和活动图,然后通过所述模板引擎生成模板代码。
2.根据权利要求1所述的生成C++代码的方法,其特征在于,所述活动图中的每一个活动均继承于AbsRootContext类,在活动类中完成与该活动相关的变迁函数的实现。
3.根据权利要求1所述的生成C++代码的方法,其特征在于,所述活动图刻画类图信息时,将所述活动图中活动之间的变迁函数选择为所述类图中的方法。
4.一种利用权利要求1生成C++的代码结构,其特征在于,所述活动图生成的代码放在一个文件夹下面,向外部设有RootContext类作为访问的接口,所述类图生成的代码中设有一个所述类图对应的活动图生成代码中RootContext类的对象context。
5.根据权利要求4所述的代码结构,其特征在于,所述访问接口数量为I个。
全文摘要
本发明公开了一种基于类图和活动图相结合生成C++代码的方法,其生成的过程是由用例图转换为类图和活动图,以每一个用例为基础,根据用例图中的对该用例描述、前置条件、后置条件、控制流等信息,生成一个类图和一个活动图;建立类图和活动图到C++代码的映射规则,为了提高代码的实用性与有效性,需要将类图和活动图结合在一起来生成代码;以基于模板的技术为框架,模板引擎的输入信息选择基于模型技术中的类图和活动图,使用基于类图和活动图的模板代码生成技术生成代码。
文档编号G06F9/45GK103176830SQ201310129978
公开日2013年6月26日 申请日期2013年4月15日 优先权日2013年4月15日
发明者段振华, 郭冬阳, 田聪, 张南, 王小兵, 罗玲 申请人:西安电子科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1