CN103164252A - 一种由序列图生成Java代码框架的方法 - Google Patents

一种由序列图生成Java代码框架的方法 Download PDF

Info

Publication number
CN103164252A
CN103164252A CN2013101322775A CN201310132277A CN103164252A CN 103164252 A CN103164252 A CN 103164252A CN 2013101322775 A CN2013101322775 A CN 2013101322775A CN 201310132277 A CN201310132277 A CN 201310132277A CN 103164252 A CN103164252 A CN 103164252A
Authority
CN
China
Prior art keywords
class
code
constitutional diagram
sequence chart
sequence
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2013101322775A
Other languages
English (en)
Other versions
CN103164252B (zh
Inventor
段振华
张超
田聪
张南
王小兵
罗玲
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xidian University
Original Assignee
Xidian University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Xidian University filed Critical Xidian University
Priority to CN201310132277.5A priority Critical patent/CN103164252B/zh
Publication of CN103164252A publication Critical patent/CN103164252A/zh
Application granted granted Critical
Publication of CN103164252B publication Critical patent/CN103164252B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明为一种由序列图生成Java代码框架的方法,主要将由系统建模得到的UML序列图自动转换得到相应的类图与状态图,其中由类图生成静态代码框架,由状态图生成代码动态信息,并分别制定各自模型到代码的映射规则,将二者有机的结合起来进而得到完整的Java代码框架。本发明保持了模型到代码的一致性,促进基于模型驱动的软件开发,提高开发效率。

Description

一种由序列图生成Java代码框架的方法
技术领域
本发明涉及一种软件开发领域,具体涉及一种将对系统建模得到的UML序列图自动转换得到相应的类图与状态图,并将二者结合起来生成Java代码框架的方法。
背景技术
OMG在2001年提出模型驱动架构。与传统开发方法相比,MDA标准方法能够把系统需求和具体的实现技术分离开来,它的核心是模型和模型的转换,它以层次区分模型,这些特点使得实现不同系统之间的互操作成为可能,并且即使在实现技术发生变化后,模型仍然具有保留的价值。
MDA标准的代码自动生成的主要流程是首先抽象出平台无关模型(Platform Independent Model,PIM),PIM能够描述完整业务功能并且与具体实现技术无关;然后根据具体实现技术的不同,制定与之对应的转换规则,在其他辅助工具的共同帮助下,将PIM模型转换成平台相关模型(Platform Specific Model,PSM),即与具体实现技术相关的PSM模型;最后经过添加其他信息至PSM模型之后,最终由PSM模型实现转换得到目标代码。
使用这种方法进行开发时,模型不仅仅可以用于软件开发文档,也是系统的主要组成部分。在这个过程中,不同的开发阶段,需要根据不同的抽象与细化层次,得到相应的模型,并最终转换得到目标代码。
详细的PIM到PSM的开发过程如下:首先从业务逻辑的角度对系统建模得到平台无关模型(PIM)。在这个过程中往往从很高的层次抽象得到系统模型,而不需要关心具体的实现技术,从而达到与具体实现技术分离的目的。
得到PIM之后,根据不同技术的各自特点,开发人员选择实现系统的具体的技术平台,然后根据选择的技术平台进行转换,进而得到相应的PSM模型。
如果在上一步之后得到的PSM仍然不能满足需求,还可以进一步精化PSM。针对更加精确的平台,可以把比较粗糙的PSM看成是它的PIM,这时就可以继续进行转换来得到更细致的PSM,通过这种层次化的转换,最终可以使PSM更加明确。
最后根据目标语言的具体特点,由PSM模型转换得到代码,进而实现代码生成的最终目的,即可运行系统。
在软件开发过程中使用MDA方法生成代码时,首先搭建与平台无关的PIM模型,这里就需要使用与平台无关的建模语言,如UML;然后根据选择的平台和目标代码的映射关系,将PIM模型转换生成PSM模型;最后由PSM模型生成目标程序代码。在整个过程中,其核心任务是实现PIM到PSM的映射和转换。
在MDA标准中,将平台相关模型PSM到目标代码的转换过程定义为代码生成,所以MDA工程的最终目标也就是PSM模型到代码的映射。在具体的开发过程中,开发人员首先需要确定目标平台,建立与之适应的解决方案,而每一个与平台相关的模块都会在其中创建各自的工程项目,然后将各个项目与PSM中对应的模型进行绑定,最后在代码生成工具的帮助下,实现目标代码的自动生成,进而得到目标代码。
发明内容
在现有的技术中,由于MDA标准中代码生成方法的不完善性,降低所生成代码的实用性。本发明的目的在于克服现有技术的不足,提供一种由序列图自动转换得到类图与状态图,进而将类图描述的系统静态信息与状态图描述的系统动态信息相结合的方法,以提高自动生成代码的质量与可用性,并保证在转换过程中模型的一致性。
为了实现上述目的,本发明采用的技术方案如下:
一种由序列图生成Java代码框架的方法,包括根据目标系统的功能需求,所绘制出该系统的UML序列图,通过所述序列图自动转换得到与其相应的类图与状态图,并由所述的类图生成静态代码框架,以及由所述的状态图生成动态代码信息,将所述静态代码框架与所述动态代码信息结合得到完整的Java代码框架,所述方法包括以下步骤:
(1)将序列图转换为类图,其中,对所述序列图对象的分析,将每个序列图中的全部对象换得到对象序列,将所述对象序列转换到一个类图中,将每一个对象转换为一个类,如果两个对象彼此有交互关系,则为它们对应的类建立关联,将每个对象上的动作、事件作为操作加入对应类中;
(2)将序列图转换为状态图,其中,分析对象在所述序列图中的消息序列,将每个序列图中消息序列转换为对序列,将所述对序列转换为单个子状态图,将所有的子状态图合成生成一个对象的完整状态图;
由序列图中的对象信息自动转换得到类图;由序列图中的动作、事件信息自动转换得到状态图;
(3)制定类图和状态图到Java代码的映射关系,从所述类图中获取代码静态结构信息,从所述状态图获取类中方法的动态信息,并分别制定所述类图和所述状态图到代码的映射关系;
(4)合并类图和状态图信息选择自动生成代码。
需要说明的是,通过上述方法可以既保证模型一致性的情况下同时又保证代码中静态信息与动态信息的完整。
需要进一步说明的是,所述类图中的模型包括实体模型和关联模型,其中,实体模型对应到java代码的映射为:
包(Package)—生成与包同名的文件夹,包中所含的类对应的源文件存于该文件夹中;
类(Class)—为每个类生成相应的文件,目标代码为Java,映射为java文件;
属性(Attribute)—为模型中的类的属性,包括可见性、数据类型和缺省值等信息,在生成代码时映射为类的成员变量的说明;
操作(Operation)—包括操作名及其参数、参数数据类型和返回值等信息,在生成代码时映射为类的成员函数。
数据类型(Data Type)—根据相应的设置生成Enum,Array等类型定义。
关联模型对应到java代码的映射为:
关联(Association)—对应到两端类中的属性;
聚集(Aggregation)—对应到目标类中的属性,以参数的形式传入对象引用;
组成(Composition)—对应到目标类中的属性,在目标类中实例化;
依赖(Dependence)—对应到目标类中的属性;
继承(Generalization)—对应目标类的子类;
实现(Realization)—对应目标类的实现类。
需要进一步说明的是,所述状态图到Java代码的映射关系:所述状态图中的图元主要包括状态、事件、变迁;其中,状态映射为Java代码中的类,每一个状态用类来表示,状态中若含有事件,则将该事件作为方法加入到对应类中,而每一个状态图也会生成一个上下文类,负责控释状态的变迁,而变迁就作为这个上下文类中的函数。
本发明有益效果在于:保持模型到代码的一致性,促进基于模型驱动的软件开发,提高开发效率。
附图说明
图1为本发明的整体架构图。
具体实施方式
下面将结合附图对本发明作进一步的描述。
一种由序列图生成Java代码框架的方法,包括根据目标系统的功能需求,所绘制出该系统的UML序列图,通过所述序列图自动转换得到与其相应的类图与状态图,并由所述的类图生成静态代码框架,以及由所述的状态图生成动态代码信息,将所述静态代码框架与所述动态代码信息结合得到完整的Java代码框架,所述方法包括以下步骤:
(1)将序列图转换为类图,其中,对所述序列图对象的分析,将每个序列图中的全部对象换得到对象序列,将所述对象序列转换到一个类图中,将每一个对象转换为一个类,如果两个对象彼此有交互关系,则为它们对应的类建立关联,将每个对象上的动作、事件作为操作加入对应类中;
(2)将序列图转换为状态图,其中,分析对象在所述序列图中的消息序列,将每个序列图中消息序列转换为对序列,将所述对序列转换为单个子状态图,将所有的子状态图合成生成一个对象的完整状态图;
由序列图中的对象信息自动转换得到类图;由序列图中的动作、事件信息自动转换得到状态图;
(3)制定类图和状态图到Java代码的映射关系,从所述类图中获取代码静态结构信息,从所述状态图获取类中方法的动态信息,并分别制定所述类图和所述状态图到代码的映射关系;
(4)合并类图和状态图信息选择自动生成代码。
需要说明的是,由序列图转换得到类图:通过对序列图中对象的分析,将每个序列图中的对象转换对象序列;将对象序列转换到一个类图中,将每一个对象转换为一个类,并为有交互关系的两个对象对应的类建立关联;将每个对象上的动作、事件作为操作加入对应类中;
需要说明的是,由序列图转换得到状态图:转换的算法设计,首先读取要生成状态图的序列图,收集该序列图中的所有的对象,每个对象将产生一个状态图。选取每一个对象,收集序列图中的该对象的所有的消息。并把收集的消息按照消息出现在序列图中出现的上下次序进行排序。然后把发送消息对应为动作,接收消息对应为事件。然后把收集的(动作,事件)序列对,对应于生成状态图的一个对象。最后用动作来标识状态的do action,事件来标识状态的一条转换,从而生成一个简单的状态图。
进一步地说,制定类图到Java代码的映射关系:类图中的模型分为实体模型与关联模型,根据其具体含义可以得到面向对象语言中的对应关系。其中实体模型对应到代码的映射为:包(Package):生成与包同名的文件夹,包中所含的类对应的源文件存于该文件夹中;类(Class):为每个类生成相应的文件。若目标代码为Java,则映射为java文件;属性(Attribute):模型中的类的属性,包括可见性、数据类型和缺省值等信息,在生成代码时映射为类的成员变量的说明。其中在映射时,无论是何种属性,只要在模型中设定了初始值,则在对应的源文件中初始化。操作(Operation):包括操作名及其参数、参数数据类型和返回值等信息,在生成代码时映射为类的成员函数。数据类型(Data Type):根据相应的设置生成Enum,Array等类型定义。
关联模型的处理办法如下所示:关联(Association):对应到两端类中的属性(如果有关联类,在关联类中实现)。聚集(Aggregation):对应到目标类中的属性,以参数的形式传入对象引用。组成(Composition):对应到目标类中的属性,在目标类中实例化。依赖(Dependence):对应到目标类中的属性。继承(Generalization):对应目标类的子类。实现(Realization):对应目标类的实现类。
类图模型到面向对象语言中代码的映射关系比较清晰,在此以Java代码为例展示模型到代码的映射关系。如下表所示。
Figure BDA00003051735900091
进一步地说,制定状态图到Java代码的映射关系:状态图中的图元主要包括状态、事件、变迁。其中状态映射为Java代码中的类,每一个状态用类来表示,状态中若含有事件,则将该事件作为方法加入到对应类中。而每一个状态图也会生成一个上下文类,负责控释状态的变迁,而变迁就作为这个上下文类中的函数。
进一步地说,将类图与状态图相结合生成Java代码:该框架生成的代码结构如下:状态图生成的代码放在一个文件夹下面,仅向外部提供一个上下文类作为访问的接口。在生成的类图代码中添加一个该类图对应的状态图生成代码中上下文类的对象,然后对类图中每一个方法进行判定:如果该方法作为了状态图中变迁事件函数,则在类图中该方法函数体中就调用上下文对象对应的该方法,否则就不调用。
对于本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及变形,而所有的这些改变以及变形都应该属于本发明权利要求的保护范围之内。

Claims (3)

1.一种由序列图生成Java代码框架的方法,包括根据目标系统的功能需求,绘制出该系统的UML序列图,其特征在于,通过所述序列图自动转换得到与其相应的类图与状态图,并由所述的类图生成静态代码框架,以及由所述的状态图生成动态代码信息,将所述静态代码框架与所述动态代码信息结合得到完整的Java代码框架,所述方法包括以下步骤:
(1)将序列图转换为类图,其中,对所述序列图对象的分析,将每个序列图中的全部对象换得到对象序列,将所述对象序列转换到一个类图中,将每一个对象转换为一个类,如果两个对象彼此有交互关系,则为它们对应的类建立关联,将每个对象上的动作、事件作为操作加入对应类中;
(2)将序列图转换为状态图,其中,分析对象在所述序列图中的消息序列,将每个序列图中消息序列转换为对序列,将所述对序列转换为单个子状态图,将所有的子状态图合成生成一个对象的完整状态图;
由序列图中的对象信息自动转换得到类图;由序列图中的动作、事件信息自动转换得到状态图;
(3)制定类图和状态图到Java代码的映射关系,从所述类图中获取代码静态结构信息,从所述状态图获取类中方法的动态信息,并分别制定所述类图和所述状态图到代码的映射关系;
(4)合并类图和状态图信息选择自动生成代码。
2.根据权利要求1所述的方法,其特征在于,所述类图中的模型包括实体模型和关联模型,其中,实体模型对应到java代码的映射为:
包(Package)—生成与包同名的文件夹,包中所含的类对应的源文件存于该文件夹中;
类(Class)—为每个类生成相应的文件,目标代码为Java,映射为java文件;
属性(Attribute)—为模型中的类的属性,包括可见性、数据类型和缺省值等信息,在生成代码时映射为类的成员变量的说明;
操作(Operation)—包括操作名及其参数、参数数据类型和返回值等信息,在生成代码时映射为类的成员函数。
数据类型(Data Type)—根据相应的设置生成Enum,Array等类型定义。
关联模型对应到java代码的映射为:
关联(Association)—对应到两端类中的属性;
聚集(Aggregation)—对应到目标类中的属性,以参数的形式传入对象引用;
组成(Composition)—对应到目标类中的属性,在目标类中实例化;
依赖(Dependence)—对应到目标类中的属性;
继承(Generalization)—对应目标类的子类;
实现(Realization)—对应目标类的实现类。
3.根据权利要求1所述的方法,其特征在于,所述状态图到Java代码的映射关系:所述状态图中的图元主要包括状态、事件、变迁;其中,状态映射为Java代码中的类,每一个状态用类来表示,状态中若含有事件,则将该事件作为方法加入到对应类中,而每一个状态图也会生成一个上下文类,负责控释状态的变迁,而变迁就作为这个上下文类中的函数。
CN201310132277.5A 2013-04-15 2013-04-15 一种由序列图生成Java代码框架的方法 Active CN103164252B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310132277.5A CN103164252B (zh) 2013-04-15 2013-04-15 一种由序列图生成Java代码框架的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310132277.5A CN103164252B (zh) 2013-04-15 2013-04-15 一种由序列图生成Java代码框架的方法

Publications (2)

Publication Number Publication Date
CN103164252A true CN103164252A (zh) 2013-06-19
CN103164252B CN103164252B (zh) 2016-08-31

Family

ID=48587370

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310132277.5A Active CN103164252B (zh) 2013-04-15 2013-04-15 一种由序列图生成Java代码框架的方法

Country Status (1)

Country Link
CN (1) CN103164252B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108647016A (zh) * 2018-05-09 2018-10-12 南京航空航天大学金城学院 一种基于uml动态模型的系统类结构生成方法
CN108762752A (zh) * 2018-04-02 2018-11-06 北京大学 一种结合动态和静态代码分析技术的安卓应用程序功能类图生成方法和装置
CN109614091A (zh) * 2018-10-09 2019-04-12 中国平安人寿保险股份有限公司 代码自动生成方法、装置、电子设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7509629B2 (en) * 2004-05-14 2009-03-24 International Business Machines Corporation Method for system and architecture design using unified modeling language (UML)
CN101673198A (zh) * 2009-03-06 2010-03-17 华东师范大学 一种验证uml模型中动态行为与时序契约的一致性的方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7509629B2 (en) * 2004-05-14 2009-03-24 International Business Machines Corporation Method for system and architecture design using unified modeling language (UML)
CN101673198A (zh) * 2009-03-06 2010-03-17 华东师范大学 一种验证uml模型中动态行为与时序契约的一致性的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
王晓宇 等: "基于UML类图和顺序图的C++代码自动生成方法的研究", 《计算机应用与软件》, vol. 30, no. 1, 31 January 2013 (2013-01-31), pages 190 - 195 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108762752A (zh) * 2018-04-02 2018-11-06 北京大学 一种结合动态和静态代码分析技术的安卓应用程序功能类图生成方法和装置
CN108647016A (zh) * 2018-05-09 2018-10-12 南京航空航天大学金城学院 一种基于uml动态模型的系统类结构生成方法
CN108647016B (zh) * 2018-05-09 2022-06-17 南京航空航天大学金城学院 一种基于uml动态模型的系统类结构生成方法
CN109614091A (zh) * 2018-10-09 2019-04-12 中国平安人寿保险股份有限公司 代码自动生成方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
CN103164252B (zh) 2016-08-31

Similar Documents

Publication Publication Date Title
CN101727324B (zh) 一种代码生成方法及装置
CN110032369A (zh) 一种代码自动生成方法、装置及介质
CN102270138B (zh) 实体对象的创建方法和实体对象创建装置
CN107122173A (zh) 一种适配activiti、可拖拽的表单生成方法
CN102591654A (zh) 一种基于ssh架构的代码生成器及方法
CN102855350B (zh) 工程图的自动出图方法及系统
CN102609255A (zh) 一种Spring IOC配置文件的生成方法
CN102968307A (zh) 一种基于java的web开发中间件
CN103823793A (zh) 基于Excel模板的动态报表实现方法
CN103164252A (zh) 一种由序列图生成Java代码框架的方法
CN103425469A (zh) 基于mda技术的手机游戏代码生成方法
CN102270136A (zh) 一种需求特征建模到体系结构建模的平滑过渡方法
CN103617265B (zh) 一种基于本体语义信息的本体查询引擎优化系统
CN106886390A (zh) 一种Java对象生成和转换方法和Java对象生成和转换装置
CN103955369A (zh) 一种基于扩展uml的软件模糊自适应建模工具构造方法
CN101620592A (zh) Pdf和xml结合存储数据的方法
Atkinson et al. A prototype implementation of an orthographic software modeling environment
KR101087197B1 (ko) 캐드 시스템과 제품 데이터 관리 시스템을 실시간으로 연계시키는 방법
Najera et al. An Ontology-Based Methodology for Integrating i* Variants.
CN103353898B (zh) 一种系统数据向cim模型xml格式转化的处理系统
CN115291869A (zh) 一种基于vue自定义组件的零代码表单生成方法与系统
CN103176830A (zh) 基于类图和活动图相结合生成c++代码的方法
CN103077284B (zh) 利用通用文本模板自动生成辅助代码文件的方法及系统
CN109684329A (zh) 一种基于数据中心设备的资源管理方法
CN104461905A (zh) 一种智能卡虚拟机、api库与上层应用同时调试的方法及系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant