专利名称:具有同基类结构模型子集的模型转换方法
技术领域:
本发明涉及模型驱动软件开发领域,具体涉及一种具有同基类结构模型子集的模型转换方法。
背景技术:
模型驱动软件开发技术是对象管理组织(Object Management Group)于2002年提出的一种系统软件开发方法学。模型驱动开发方法注重软件的复用、平台无关性,适合于大型复杂系统的设计,随着近几年的发展,模型驱动架构(MDA)在建模领域得到了十分广泛的应用。AUTOSAR(AUTomotive Open System ARchitecture)是汽车电子开放系统架构,其阐述了一个层次化的软件设计架构,并定义了各个层次之间的交互接口和数据交互形式。 基于该架构,一个复杂的软件设计过程划分得更细、模块划分更明确,使得多个软件开发商可以共同参与其中,各自发挥相应的软件开发优势,最终通过统一的AUTOSAR元模型格式实现交互。AUTOSAR元模型是在UML标准的基础上,通过UML Profile方式拓展得到。考虑到模型的通用性,为了降低模块之间的耦合性,AUTOSAR元模型一共包含有几千个模型元素,模型元素之间的层次关系比较复杂。AUTOSAR标准所规定的开发方法适合使用模型驱动架构。在模型驱动架构中,关键元素是元模型,在开发AUTOSAR配置工具时,还要关注界面显示的简洁性。目前工业上也有一些很强大的建模框架,比如Eclipse平台中白勺 EMF(Eclipse Modeling Framework)> ^ M Il ^ GMF(Graphical Modeling Framework)等,但是采用Eclipse建模框架开发AUTOSAR工具已经成为一个热门选择,但是这些建模框架往往由于不够简洁,增加了配置的复杂性和友好性。例如采用GMF建模框架实现一个AUTOSAR建模工具时,由于该框架本身是基于MVC特点,数据保存模型严格与界面显示元素相一致,如果直接按照AUTOSAR元模型来设计图形化建模工具,无疑会使得界面上的配置项太多,导致配置复杂、不够友好。因此,对配置界面项的简化是一种常见的需求。界面的简化有时只是局部的,即只调整某些模型元素的配置过程,而保留相对一部分模型配置过程不变。在这种应用场景下,完全定义一套全新的局部模型没有必要。分析AUTOSAR元模型,其定义了一个基础模型架构,所有的子模块都是继承自基础模型。基于这种松耦合关系,有另外一种折中方案,即配置界面所需的局部模型和标准模型是继承自基础模型的两个模型子集。定制一套简化的模型用于界面配置的存储,当需要与其他的模块或工具交互时,将定制的AUTOSAR模型转换为标准模型即可。传统的模型转换方法一般是设计一个复杂的转换引擎和一套完整的转换规则来完成不同模型的转换。但是,如果模型非常复杂,则需要迭代完成转化过程,而且该方法对转换规则的定义、健壮性要求高,转换过程复杂,开发成本高
发明内容
本发明要解决的技术问题是针对现有技术的上述问题,提供一种转换简单方便、 转换快、时间消耗少、开发成本低的具有同基类结构模型子集的模型转换方法。为了解决上述技术问题,本发明采用的技术方案为一种具有同基类结构模型子集的模型转换方法,其特征在于其实施步骤如下1)将源模型子集的数据文件采用树状结构展开,获取源模型子集的所有主节点以及次节点;2)逐一将源模型子集的主节点转换为目标模型子集的主节点,将源模型子集主节点对应的次节点复制到目标模型子集的主节点上,并将源模型子集的主节点和目标模型子集的主节点一一对应并建立哈希表;3)逐一分析目标模型子集的主节点,获取当前主节点的所有针对源模型子集的引用节点信息,然后根据哈希表将引用节点信息更新为针对目标模型子集的引用节点信息。作为本发明技术方案的进一步改进所述步骤2)中预先分析源模型子集和目标模型子集之间主节点的元模型,建立元模型不同的转换规则,所述将源模型子集的主节点转换为目标模型子集的主节点时,首先判断源模型子集和目标模型子集之间主节点的元模型是否相同,如果元模型相同则直接将源模型子集的主节点复制到目标模型子集;如果元模型不同,则根据所述转换规则将源模型子集的主节点转换为目标模型子集的主节点。所述步骤3)中根据哈希表将引用节点信息更新为针对目标模型子集的引用节点信息时,如果引用节点信息在哈希表中查找失败,则仍然将引用节点信息保留原值。本发明具有下述优点1、本发明针对具有共同基类结构的模型子集,利用源模型子集和目标模型子集之间具有一定的共性,高效实现具有共同基类结构的两套子模型子集的快速转换,具有转换简单方便、转换快、时间消耗少、开发成本低的优点。2、本发明将将源模型子集的数据文件采用树状结构展开,获取源模型子集的所有主节点以及次节点,简化了转换规则的定义过程,转换更加简单和高效。3、本发明将转换过程分成对象转换和引用重置两个大步骤,简化了模型转换的复杂性,方法简单可靠。
图1为本发明实施例的转换流程示意图。图2为本发明实施例中模型子集的展开结构示例图。图3为本发明实施例的转换详细流程示意图。图4为本发明实施例转换前模型子集的结构示例图。图5为本发明实施例转换中模型子集的结构示例图。图6为本发明实施例转换后模型子集的结构示例图。
具体实施例方式如图1所示,本发明实施例的具有同基类结构模型子集的模型转换方法,其实施步骤如下
1)将源模型子集的数据文件采用树状结构展开,获取源模型子集的所有主节点以及次节点;2)逐一将源模型子集的主节点转换为目标模型子集的主节点,将源模型子集主节点对应的次节点复制到目标模型子集的主节点上,并将源模型子集的主节点和目标模型子集的主节点一一对应并建立哈希表;3)逐一分析目标模型子集的主节点,获取当前主节点的所有针对源模型子集的引用节点信息,然后根据哈希表将引用节点信息更新为针对目标模型子集的引用节点信息。本实施例中,源模型子集的数据文件均采用XML文件表达,通过将源模型子集的数据文件解析为Eclipse Modeling Framework(EMF)内存对象集合EObject。内存对象 EObject 由一系列的 EStructuralFeature 属性组成,EStructuralFeature 分为两类 EAttribute和EReference两类,EAttribute表示基本属性,EReference表示为关联属性。 EReference有两种形式,包含关系和非包含关系(引用关系)。对象转换过程是依据源模型EObject对象,重构生成目标模型EObject对象的EAtrribute和EReference属性值。 EObject具有两种查看方式,一种是树状结构,可以清楚表达节点之间的包含关系,便于节点之间的关系处理;另一种是并行结构,用于遍历所有的节点。本实施例步骤1)中,通过树状结构查看方式将源模型子集的数据文件采用树状结构展开,每一个主节点获得一个主节点EObject对象。步骤2)中将源模型子集的每一个主节点EObject对象作为Key,将目标模型子集的每一个主节点EObject对象作为Value,将——对应的<Key,Value〉建立哈希表 HashMap。通过哈希表HashMap,将将源模型子集的每一个主节点EObject对象和目标模型子集的每一个主节点EObject对象建立一对一的映射关系,以便在重构引用关系时,便于查找新的主节点EObject对象。本实施例中,引用节点信息为引用主节点信息,步骤3)中, 获取当前主节点的引用节点信息对应的Key,然后查找哈希表HashMap对应的Value,并将引用的原主节点Key替换为引用新主节点Value。此外,引用节点信息可以包括引用次节点信息,更新时需要将次节点所对应的主节点进行更新即可,其工作原理相同。如图2所示,本实施例中具有共同基类的AUT0SAR模型子集包括子模型1和子模型2,子模型1包括Node a.Node b.Node c三个节点,采用树状结构展开后,Node a为主节点,Node b、Node c为次节点。子模型2包括Node A、Node B、Node C三个节点,采用树状结构展开后,Node A为主节点,Node B,Node C为次节点。一个模型子集在内存中被展开以后为森林结构,森林结构中每一个基本的树形结构代表一个主节点及其次节点。每一个树形结构的根节点为主节点,主节点下面的直接或间接子节点称为次节点,次节点依赖主节点而存在,是指主节点表示的是元素,而次节点是表示的是主节点的内部特性,其他节点不能直接访问次节点,必须通过主节点的上下文访问。该模型中,根节点是AUT0SAR,AUT0SAR 包含ARPackage节点,ARPackage节点包含PackageElement节点,模型子集的划分是基于 PackageElement元素。子模型1和子模型2都是继承基类模型的具体实现类,其所有元素继承自ARElement、或Identif iable、或AROb ject,其中主节点Node a和主节点Node A都是继承同一基类ARElement。步骤2)中预先分析源模型子集和目标模型子集之间主节点的元模型,建立元模型不同的转换规则,将所有的转换规则通过转换规则库进行保存,在需要使用转换规则时则根据元模型信息查找转换规则库获取对应的转换规则即可。将源模型子集的主节点转换为目标模型子集的主节点时,首先判断源模型子集和目标模型子集之间主节点的元模型是否相同,如果元模型相同则直接将源模型子集的主节点复制到目标模型子集;如果元模型不同,则根据转换规则将源模型子集的主节点转换为目标模型子集的主节点。目标模型子集新生成的主节点除了基本属性和源模型子集相同外,引用属性也和源模型子集一致。本实施例中,转换规则用来说明源对象的EStructuralFeature属性与目标对象的 EStructuralFeature属性的对应关系,转换规则的定义方式有多种形式,Java代码、OCL语言均可。通过转换规则,可以简单实现不同主节点之间的转换规则,转换简单快速、不需要专用的转换引擎,也不需要迭代,对转换规则的定义、健壮性要求低,转换过程简单,开发成本低。如图3所示,本实施例步骤2)中遍历源模型子集的每个源ARElement元素,依据转换规则,调用对象转换器,生成新的ARElement,并置入HashMap中;步骤3)中在新生成的目标模型子集中,遍历每个主节点,然后访问以主节点为根的树状结构中每个元素,分析其引用属性,即找出该EObject对象的EReference属性,判断该EReference是否表示的是引用关系,若是,则以该EReference值为Key,在HashMap中查找对应的值域,如果找到对应的值,更新EReference属性域,否则保留EReference属性域不变。步骤3)中根据哈希表将引用节点信息更新为针对目标模型子集的引用节点信息时,如果引用节点信息在哈希表中查找失败,则仍然将引用节点信息保留原值。通过对在哈希表中查找失败将引用节点信息保留原值,可以有效防止模型子集在转换过程中丢失模型信息,双向兼容性好。如图4所示,源模型子集包含两个树状结构主节点a和b。如图5所示,在转换过程中,主节点a被换换为临时目标对象Aa、主节点b被换换为临时目标对象Bb,内存中的临时目标对象Aa和Bb都被展开为树形结构,其中临时目标对象Aa中仍然存在一个子节点引用源模型子集中的主节点b。如图6所示,在转换完毕以后,临时目标对象Aa被换换为目标模型子集中的主节点A、临时目标对象Bb被换换为目标模型子集中的主节点B,主节点A中的子节点已经将引用原主节点b替换为引用新的主节点B。以上所述仅为本发明的优选实施方式,本发明的保护范围并不仅限于上述实施方式,凡是属于本发明原理的技术方案均属于本发明的保护范围。对于本领域的技术人员而言,在不脱离本发明的原理的前提下进行的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
权利要求
1.一种具有同基类结构模型子集的模型转换方法,其特征在于其实施步骤如下1)将源模型子集的数据文件采用树状结构展开,获取源模型子集的所有主节点以及次节点2)逐一将源模型子集的主节点转换为目标模型子集的主节点,将源模型子集主节点对应的次节点复制到目标模型子集的主节点上,并将源模型子集的主节点和目标模型子集的主节点一一对应并建立哈希表;3)逐一分析目标模型子集的主节点,获取当前主节点的所有针对源模型子集的引用节点信息,然后根据哈希表将引用节点信息更新为针对目标模型子集的引用节点信息。
2.根据权利要求1所述的具有同基类结构模型子集的模型转换方法,其特征在于所述步骤2)中预先分析源模型子集和目标模型子集之间主节点的元模型,建立元模型不同的转换规则,所述将源模型子集的主节点转换为目标模型子集的主节点时,首先判断源模型子集和目标模型子集之间主节点的元模型是否相同,如果元模型相同则直接将源模型子集的主节点复制到目标模型子集;如果元模型不同,则根据所述转换规则将源模型子集的主节点转换为目标模型子集的主节点。
3.根据权利要求1所述的具有同基类结构模型子集的模型转换方法,其特征在于所述步骤3)中根据哈希表将引用节点信息更新为针对目标模型子集的引用节点信息时,如果引用节点信息在哈希表中查找失败,则仍然将引用节点信息保留原值。
全文摘要
本发明公开了一种具有同基类结构模型子集的模型转换方法,其实施步骤如下1)将源模型子集的数据文件采用树状结构展开,获取源模型子集的所有主节点以及次节点;2)逐一将源模型子集的主节点转换为目标模型子集的主节点,将源模型子集主节点对应的次节点复制到目标模型子集的主节点上,并将源模型子集的主节点和目标模型子集的主节点一一对应并建立哈希表;3)逐一分析目标模型子集的主节点,获取当前主节点的所有针对源模型子集的引用节点信息,然后根据哈希表将引用节点信息更新为针对目标模型子集的引用节点信息。本发明具有转换简单方便、转换快、时间消耗少、开发成本低的优点。
文档编号G06F9/44GK102193802SQ20111013066
公开日2011年9月21日 申请日期2011年5月19日 优先权日2011年5月19日
发明者刘敏, 杨国青, 汪金波, 钟晓峰, 顾宗华 申请人:浙江大学