zoukankan      html  css  js  c++  java
  • Model to Text工具Acceleo使用教程(三)——一个简单的代码生成模块

      前面对Acceleo的知识背景和基本架构进行了讲解,接下来就将开始模型到代码的生成了。本讲将逐步讲解一个简单的代码生成模块(UML to Html)。Acceleo的代码生成是基于模板的,所以有了输入模型(如UML)后,需要建立对应模型的模板,然后生成代码。原理如图1所示。

    图1 基于模板的Acceleo

    1、新建项目

      首先,切换到Acceleo视图,新建generator project。此处,我们可以命名为“acceleo.uml2.gen.xhtml”。接下来,我们需要输入模型。

    2、建立模型

      目前,可用的建模工具有很多,Acceleo提供了很好的机制来兼容这些不同的建模工具,可以兼容ArgoUML, Poseidon, Umbrello or Rational Rose等。更多兼容工具请参考点击此处

      此处,我们暂时用Topcased新建了一个UML2模型,可以点击下载WebLog_fr.uml

      注意:Acceleo也兼容UML1.3/1.4,用户可以通过Acceleo-->Convert EMF转为将其转换为UML2。

    3、建立模板

      有了模型之后,我们就需要建立模板来将模型转换成代码了。通过 Empty Generator新建空的模板。

      因为我们的源模型是UML2,所以我们在Registry values选择UML2的URI(统一资源标识符),假设此处我们想要为每个class生成一个文件,需要在type values选择uml.class。完成后就生成了一个空的模板,如图2所示。

    图2 空的UMl2模板

    4、生成代码

      在生成代码之前,先介绍acceleo的一种特殊的编辑器 reflective editor,它提供了一种模型的树状结构视图,并集成了Acceleo的几乎所有功能。我们将在此编辑器下将UML2模型生成HTML。在acceleo中,可以通过 Open As->Acceleo XMI打开此编辑器。

      接下来比较重要的一步,就是将模型与模板绑定,即指定模型用哪个模板。在reflective editor下,任意选择一个目标结点,通过Acceleo -> Select Template为此模型结点指定模板,当指定成功后,在outline视图中,相应结点(如此处的class)会变成带右箭头的图标,如图3所示。图3表示class的模板绑定成功,可以将class生成代码。

    图3 模板绑定成功后,相关结点图标变成箭头

      当然,前面我们建立的模板是空的,所以class生成的代码也是空的。所以需要将模板写全,图4是写全后的模板,可以点击此处下载sample template from UML2 to XHTML。关于的模板的更多语法,大家可以参考documentation section 和 sample generator modules

    图4 UML to HTML的模板

      当模板写全并保存后,通过Acceleo -> Reload Template 更新模板。如此反复,直到模板能够满足自己的要求。

      最后也就是最重要的一步,就是生成代码了。通过Acceleo -> Generate files可以将代码生成到文件中(此处,我们设置文件保存在doc文件夹下)。我们可以看到,acceleo为每个class生成了一个文件,如图5所示。

    图5 class模板生成的html代码

    5、批量代码生成

      上面完成了单个模板到代码的生成,如果模型很多呢?不用担心,acceleo提供了批量生成的功能,即链文件(chain files)。

    • 新建项目:New -> Project -> Simple -> Simple Project
    • 新建链:New -> Chain
    • 定制元模型,如第3步所示。
    • 选择链的模型、模板和名字。
    • 在新建的.chain文件下,右击执行Launch,文件即自动生成了。

    6、总结

      本讲从一个简单的代码生成器(UML to HTML)开始,介绍了其使用流程,并讲了批量模型生成的情况,下一讲我们开始介绍acceleo模板的语法,以便大家设计自己需要的模板。

     

     

     

  • 相关阅读:
    明明的随机数
    字符串大小写转换
    字符串合并处理
    【数据结构】c语言实现集合的交并差运算
    【数据结构】一元多项式
    【保存】
    {【保存】数据结构
    【java】关键字this怎么用?
    【数据结构】顺序表
    【JAVA】【作业向】第一题:本学期一班级有n名学生,m门课程。现要求对每门课程的成绩进行统计:平均成绩、最高成绩、最低成绩,并统计考试成绩的分布律。
  • 原文地址:https://www.cnblogs.com/jpcflyer/p/2512036.html
Copyright © 2011-2022 走看看