• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      一種基于MDA的分布式對象模型框架代碼生成方法

      2014-03-25 03:07:32張森鄧?yán)?/span>吳健朱明潔
      關(guān)鍵詞:代碼生成代碼分布式

      張森, 鄧?yán)? 吳健, 朱明潔

      (1.西北工業(yè)大學(xué) 計算機學(xué)院, 陜西 西安 710072; 2.中航工業(yè)西安飛機設(shè)計研究所, 陜西 西安 710089)

      分布式對象模型是分布式技術(shù)和面向?qū)ο蠹夹g(shù)結(jié)合的產(chǎn)物,它是對分布式系統(tǒng)的業(yè)務(wù)處理進行抽象來構(gòu)造出的一組相關(guān)模型。這些模型通過接口來實現(xiàn)客戶程序和分布式中間件的相互通信,具有可重用性、平臺無關(guān)性等優(yōu)點。分布式對象模型框架代碼是分布式對象模型在具體平臺上的體現(xiàn),提供具體平臺上的分布式對象發(fā)布訂閱和遠(yuǎn)程方法訪問等服務(wù)。文獻[1]描述了一種基于模板的代碼自動生成方法,該方法有效解決了人工編寫分布式對象模型框架代碼工作量大、錯誤率高的問題,大大提高了軟件開發(fā)的速度和質(zhì)量。然而代碼生成的規(guī)則都是在程序中硬編碼實現(xiàn)的,可擴展性和可維護性較差。

      MDA(model driven architecture,模型驅(qū)動架構(gòu))是由OMG(object management group,對象管理組織)于2001年提出來的一種軟件開發(fā)框架。該框架以模型為核心,并將模型貫穿于整個軟件開發(fā)過程之中。它根據(jù)軟件開發(fā)的不同階段將模型分為PIM(platform independent model,平臺無關(guān)模型)、PSM(platform specific model ,平臺相關(guān)模型)和代碼3種。在MDA中,軟件開發(fā)過程由對軟件系統(tǒng)的建模行為驅(qū)動[2],首先要建立能夠描述系統(tǒng)全部業(yè)務(wù)的、與具體平臺無關(guān)的PIM。然后制定PIM到具體平臺的PSM的模型轉(zhuǎn)換規(guī)則,并通過這些規(guī)則將PIM轉(zhuǎn)換成一個或多個PSM。最后根據(jù)具體平臺的代碼生成技術(shù)將PSM轉(zhuǎn)換成相應(yīng)平臺的程序代碼。本文結(jié)合一種典型的分布式對象模型框架需求,改進了現(xiàn)有的基于模板技術(shù)的代碼生成技術(shù),提出了一種基于MDA的代碼生成方法,有效提高了分布式對象模型框架代碼生成系統(tǒng)的可擴展性和可維護性。

      1 基于模板技術(shù)的模型框架代碼生成

      分布式對象模型框架代碼生成系統(tǒng)的作用是將用戶編寫的分布式對象模型描述VDL文件,通過解析,生成分布式模型框架代碼。該系統(tǒng)主要分為3個部分:模型解析、代碼生成和驅(qū)動引擎,如圖1所示。

      模型解析的功能是以動態(tài)鏈接庫的形式提供一組API,以供驅(qū)動引擎調(diào)用。此API實現(xiàn)了對用戶給出的分布式對象模型描述VDL文件的解析,并將解析結(jié)果組織、記錄在一個中間表示數(shù)據(jù)結(jié)構(gòu)(IR)中。該部分包括詞法分析和語法分析模塊。詞法分析模塊從VDL文件中分離出VDL的單詞。語法分析是通過YACC(yet another compiler compiler)工具生成的VDL語法分析器來完成對VDL語法分析處理的。語法分析的過程會依照語義的描述來完成中間表示數(shù)據(jù)的記錄。語法分析過程中會通過2條途徑報告VDL語法錯誤。一條途徑是當(dāng)輸入VDL文件不符合VDL文法規(guī)定時,直接報告錯誤。此類錯誤一旦出現(xiàn),就退出編譯過程。另一條途徑是在語義處理過程中檢查并報告與上下文有關(guān)的錯誤。

      圖1 基于模板技術(shù)的代碼生成框架

      代碼生成的任務(wù)是以動態(tài)鏈接庫的形式提供一組API,以供驅(qū)動引擎調(diào)用,并生成適配于分布式中間件的對象模型框架代碼。該框架代碼主要包括2部分。一部分是CORBA(TAO)的IDL代碼,IDL代碼最終交由TAO的IDL編譯器進行編譯生成Skeleton和Stub的C++代碼,這部分代碼主要完成VDO遠(yuǎn)程方法訪問的功能。另一部分是C++代碼,此部分代碼會與分布式中間件協(xié)同,以實現(xiàn)分布式對象VDO的狀態(tài)發(fā)布/訂閱功能。

      由于分布式中間件的協(xié)同代碼具有很多的共性,不同的VDL對應(yīng)的協(xié)同代碼的差異性信息在VDL文件中均已定義,故采取模板的技術(shù)對分布式中間件協(xié)同代碼進行生成。

      系統(tǒng)首先將同一類分布式對象的中間件協(xié)同代碼做成模板的形式,其中不變部分以源代碼的方式直接給出;可變部分以標(biāo)簽的形式給出。其次,根據(jù)具體的分布式對象的信息來生成各個標(biāo)簽的內(nèi)容。最后,替換模板中的所有標(biāo)簽,并輸出替換標(biāo)簽后的模板,即生成中間件協(xié)同代碼。

      驅(qū)動引擎的任務(wù)是讀取用戶輸入的分布式對象模型VDL描述文件,調(diào)用模型解析部分的API,生成中間表示數(shù)據(jù)結(jié)構(gòu)IR。然后掃描該IR,并調(diào)用代碼生成部分提供的API,自動生成分布式對象模型代碼。

      由上述生成方案可以看出,代碼生成規(guī)則都是事先在程序中通過硬編碼設(shè)定的,一旦生成規(guī)則發(fā)生改變或者生成另一種平臺的模型框架代碼,則開發(fā)人員將重新修改原來的程序代碼,可擴展性和可維護性較差。

      2 基于MDA的分布式對象模型框架代碼生成方法

      本文結(jié)合分布式對象模型框架需求和MDA思想,提出了一種新的代碼生成方法。主要包括:PIM建立、PIM到PSM的轉(zhuǎn)換和PSM到代碼的生成3個部分。PIM建立部分主要完成分布式對象PIM的建立,然后將其描述成XML文件。PIM到PSM的轉(zhuǎn)換部分以PIM描述XML文件為輸入,結(jié)合PIM和PSM元模型之間的轉(zhuǎn)換規(guī)則來轉(zhuǎn)換成PSM,并將其描述為XML文件。PSM到代碼的生成部分以PSM描述XML文件為輸入,采用XSLT技術(shù)來完成代碼的生成。系統(tǒng)架構(gòu)如圖2所示。

      圖2 基于MDA的代碼生成架構(gòu)圖

      2.1 分布式對象PIM

      分布式對象PIM的描述有2種方式:①VDL描述。VDL是一種專門為描述分布式對象而設(shè)計的語言,該語言類似于IDL語言,具有很高的靈活性。②Ecore描述。Ecore是EMF(eclipse model framework,Eclipse模型框架)的元元模型,是UML的一個子集。開發(fā)人員可以使用EMF中的Ecore樹形樣本編輯器快速方便地建立分布式對象Ecore模型。然而,盡管它們均能詳細(xì)地描述分布式系統(tǒng)的對象信息,但是卻無法作為MDA中PIM到PSM映射轉(zhuǎn)換的輸入。為此,本文采用XML文件作為系統(tǒng)的標(biāo)準(zhǔn)描述文件。對于VDL描述文件,則需要進行詞法分析和語法分析,將解析出的模型信息表述為XML文件。而對于Ecore描述,則可以使用標(biāo)準(zhǔn)XMI將Ecore表示的模型信息串行化成XML文件。以localclass對象模型Person為例,該對象具有2個屬性:①公有的name屬性,其類型為string。②只讀的age屬性,其類型為short。其XML描述為:

      xmlns:xmi=http://www.omg.org/XMI

      xmlns:vdl="platform:/resource/VdlModelRefactoring/MetaModel/Vdl.ecore"

      name="Person">

      2.2 分布式對象PSM

      分布式對象模型代碼主要實現(xiàn)分布式對象的遠(yuǎn)程方法訪問和發(fā)布訂閱功能。遠(yuǎn)程方法訪問是借助CORBA來實現(xiàn)的,系統(tǒng)首先要生成IDL代碼,然后經(jīng)過IDL編譯器編譯形成Skeleton和Stub的C++代碼。因此需要將PIM轉(zhuǎn)換成CORBA平臺的IDL-PSM模型。而發(fā)布訂閱功能是單獨用C++語言設(shè)計實現(xiàn)的,所以還需要轉(zhuǎn)換成C++平臺的C++-PSM模型。為了PSM模型到代碼的生成,所以PSM模型也采用XML進行描述。還以localclass對象模型Person為例,該對象會映射到一個C++平臺的class模型。該模型主要包含了Person模型對應(yīng)的屬性的get/set方法。根據(jù)Person模型屬性的修飾符不同,其轉(zhuǎn)換方法也不同。對于公有屬性,轉(zhuǎn)換后class模型含有g(shù)et/set方法。對于只讀屬性,轉(zhuǎn)換后只有g(shù)et方法,而沒有set方法。其XML描述為:

      xmlns:xmi=http://www.omg.org/XMI

      xmlns:cpsm="platform:/resource/VdlModelRefactoring/MetaModel/CPsm.ecore"

      name="Person">

      2.3 分布式對象PIM到PSM的轉(zhuǎn)換

      模型轉(zhuǎn)換是MDA中的關(guān)鍵部分。MDA中PIM到PSM的轉(zhuǎn)換是基于轉(zhuǎn)換規(guī)則來進行轉(zhuǎn)換的。為了使轉(zhuǎn)換規(guī)則的定義標(biāo)準(zhǔn)化,OMG開發(fā)了一組編寫轉(zhuǎn)換規(guī)則定義的標(biāo)準(zhǔn)語言QVT(query/view/transformation)。而ATL(atlas transformation language,Atlas轉(zhuǎn)換語言)是ATLAS研究組開發(fā)出來的一種模型轉(zhuǎn)換語言。該語言是EMF下的一種語言,符合OMG的QVT標(biāo)準(zhǔn),可以將一組模型轉(zhuǎn)換成一種或多種目標(biāo)模型。ATL的模型轉(zhuǎn)換規(guī)則定義在轉(zhuǎn)換模型所在層的上一層。如果轉(zhuǎn)換的模型處于M1模型層,那么模型轉(zhuǎn)換規(guī)則定義在M2元模型層。所以開發(fā)人員首先要設(shè)計PIM和PSM的元模型,然后再制定相應(yīng)的轉(zhuǎn)換規(guī)則,才能將輸入的PIM自動轉(zhuǎn)換成PSM。

      以localclass對象模型到C++平臺的class模型的轉(zhuǎn)換為例,首先要定義localclass對象模型和C++平臺的class模型的元模型。元模型如圖3所示:

      圖3 localclass元模型和class元模型

      然后定義localclass元模型到class元模型轉(zhuǎn)換的規(guī)則,如下所示:

      rule Root {

      from

      s : VDL!localclass

      to

      t : CPSM!class(

      name <-s.name,

      func <-

      s.attr->select(e|e.modifier=′public′)->collect(e|thisModule.functionset(e)),

      func <- s.attr->collect(e|thisModule.functionget(e))

      )

      }

      lazy rule functionset {

      from

      c : VDL!attribute

      to

      m : CPSM!function(

      rettype <-′void′,

      name <-′set_′+c.name,

      param <-

      thisModule.parameter(c)

      )

      }

      lazy rule functionget {

      from

      c : VDL!attribute

      to

      m: CPSM!function(

      rettype <- c.type,

      name <-′get_′+c.name

      )

      }

      lazy rule parameter {

      from

      s : VDL!attribute

      to

      t : CPSM!parameter(

      type <- s.type,

      name <- s.name

      )

      }

      其中,Root規(guī)則段定義了PIM元模型中l(wèi)ocaclass模型到PSM元模型中class模型的映射。首先將localclass模型中的name屬性原封不動地轉(zhuǎn)成class模型的name屬性,然后將localclass模型中的attr屬性轉(zhuǎn)換成function模型。對于公有的attr才能轉(zhuǎn)換成set方法的function模型。functionset和functionget規(guī)則段定義了PIM元模型中attribute模型到PSM元模型中function模型的映射。functionset規(guī)則產(chǎn)生set方法,functionget規(guī)則產(chǎn)生get方法。對于set方法function模型中的返回值類型rettype為void類型,方法名name由字符串"set_"和屬性名拼接而成。參數(shù)param由規(guī)則parameter來產(chǎn)生。而對于get方法function模型中的返回值類型rettype為屬性的類型,方法名name由字符串"get_"和屬性名拼接而成。paramter規(guī)則段定義了PIM元模型中attribute模型到PSM元模型中parameter模型的映射。該規(guī)則將attribute模型的屬性type和name對應(yīng)映射到了parameter模型的屬性type和name。

      2.4 分布式對象PSM到代碼的生成

      分布式對象模型代碼的生成主要完成從PSM模型到代碼的生成。該部分以PSM模型描述XML文件為輸入,并從中解析出模型信息,然后結(jié)合代碼模板生成具體平臺的模型代碼。由于分布式對象模型代碼具有很大的共性,并可以將其編寫成XSLT模板,并且代碼的動態(tài)部分信息是由XML文件描述的,所以代碼生成可以采用XSLT/XML技術(shù)來生成模型代碼。

      XSLT代表eXtensible Stylesheet

      Language:Transformations(擴展樣式表語言:轉(zhuǎn)換),是一種用來將一個XML文檔的結(jié)構(gòu)進行轉(zhuǎn)換的語言[3]。它可以將XML文檔轉(zhuǎn)換為其他基于文本格式的文檔,也可以轉(zhuǎn)換成另一種XML文檔。以Person模型為例,其xslt轉(zhuǎn)換代碼為:

      encoding="ISO-8859-1"?>

      xmlns:cpsm="platform:/resource/VdlMod

      elRefactoring/MetaModel/CPsm.ecore"

      xmlns:xsl="http://www.w3.org/1999/XSL/

      Transform">

      #include

      disable-output-escaping="yes"><

      ext>string

      disable-output-escaping="yes">>

      ext>

      using namespace std;

      class

      select="/cpsm:class/@name"/>

      {

      public:

      (

      );

      };

      其中,是XSLT的核心部分,該元素用于創(chuàng)建模板,并通過其屬性match將此模板規(guī)則匹配到XML文檔中某些節(jié)點。在轉(zhuǎn)換過程中,XSLT處理器通過指令的XPATH表達式來定位到XML文檔中符合條件的節(jié)點,然后把節(jié)點的值按照指令的規(guī)則內(nèi)容轉(zhuǎn)換到結(jié)果文檔中,從而形成程序代碼。

      3 結(jié) 論

      本系統(tǒng)架構(gòu)已經(jīng)在虛擬試驗分布式對象框架代碼生成系統(tǒng)中得到應(yīng)用。采用該系統(tǒng)架構(gòu),開發(fā)人員可以方便地修改模型、轉(zhuǎn)換規(guī)則和XSLT模板來調(diào)整模型代碼的生成,極大地縮短了開發(fā)人員的工作量,有效提升了系統(tǒng)開發(fā)的效率,提高了可擴展性、可維護性和可移植性。

      參考文獻:

      [1] 肖寒. J2EE平臺下代碼自動生成技術(shù)研究[J]. 電腦知識與技術(shù),2009,5(20):5421-5422,5434

      Xiao Han. Study of Code Generation Technology Based on J2EE Platform[J]. Computer Knowledge and Technology, 2009,5(20):5421-5422,5434 (in Chinese)

      [2] Anneke Kleppe, Jos Warmer, Wim Bast. 解析MDA[M]. 鮑志云,譯. 北京: 人民郵電出版社,2004

      Anneke Kleppe, Jos Warmer, Wim Bast. MDA Analysis[M]. Bao Zhiyun, Translator. Beijing: Posts& Telecom Press, 2004 (in Chinese)

      [3] Michael Kay. XSLT程序員參考手冊[M]. 朱冬東,呂俊輝,李玫,譯. 北京: 機械工業(yè)出社,2002

      Michael Kay. XSLT Programmer′s Reference[M]. Zhu Dongdong, Lü Junhui, Li Mei, Translator. Beijing: China Machine Press,2002 (in Chinese)

      [4] 曾一,許林,黃興硯,王翠欽. 一種結(jié)合MDA的高階模型轉(zhuǎn)換方法[J]. 計算機應(yīng)用研究, 2012,29(12):4584-4588

      Zeng Yi, Xu Lin, Huang Xingyan, Wang Cuiqin. Method of Higher-Order Model Transformation Combined with MDA[J]. Application Research of Computers, 2012,29(12):4584-4588 (in Chinese)

      [5] 趙遠(yuǎn)東,王云華. 基于J2EE平臺的MDA模型驅(qū)動架構(gòu)技術(shù)[J]. 電腦知識與技術(shù), 2010,6(25):7017-7018,7043

      Zhao Yuandong,Wang Yunhua. Model Driven Architecture Based on J2EE System[J]. Computer Knowledge and Technology, 2010,6(25):7017-7018,7043 (in Chinese)

      [6] 於良偉,袁泉,霍劍青,王曉蒲. 基于XML和XSLT的模型驅(qū)動構(gòu)架[J]. 計算機工程, 2010,36(6):49-51

      Yu Liangwei,Yuan Quan, Huo Jianqing, Wang Xiaopu. Model Driven Architecture Based on XML and XSLT[J]. Computer Engineering, 2010,36(6):49-51 (in Chinese)

      [7] 楊美榮,史建鋒,李明星. 基于MDA的代碼生成器設(shè)計與實現(xiàn)[J]. 計算機工程, 2009,35(12):47-49,53

      Yang Meirong, Shi Jianfeng, Li Mingxing. Design and Implementation of Code Generator Based on MDA[J]. Computer Engineering, 2009,35(12):47-49,53 (in Chinese)

      [8] Mhamed Rahmouni, Samir Mbarki. MDA-Based ATL Transformation to Generate MVC 2 Web Models[J]. International Journal of Computer Science & Information Technology, 2011,3(4):57-70

      猜你喜歡
      代碼生成代碼分布式
      Lustre語言可信代碼生成器研究進展
      創(chuàng)世代碼
      動漫星空(2018年11期)2018-10-26 02:24:02
      創(chuàng)世代碼
      動漫星空(2018年2期)2018-10-26 02:11:00
      創(chuàng)世代碼
      動漫星空(2018年9期)2018-10-26 01:16:48
      創(chuàng)世代碼
      動漫星空(2018年5期)2018-10-26 01:15:02
      分布式光伏熱錢洶涌
      能源(2017年10期)2017-12-20 05:54:07
      分布式光伏:爆發(fā)還是徘徊
      能源(2017年5期)2017-07-06 09:25:54
      代碼生成技術(shù)在軟件開發(fā)中的應(yīng)用
      電子世界(2016年15期)2016-08-29 02:14:28
      基于XML的代碼自動生成工具
      電子科技(2015年2期)2015-12-20 01:09:20
      基于DDS的分布式三維協(xié)同仿真研究
      雷達與對抗(2015年3期)2015-12-09 02:38:50
      安丘市| 湘西| 洞头县| 平塘县| 玛曲县| 苏尼特右旗| 龙岩市| 古丈县| 新宁县| 宜宾市| 永登县| 阿克苏市| 葵青区| 晋中市| 临汾市| 峨边| 科尔| 博乐市| 澎湖县| 且末县| 黄龙县| 莲花县| 嘉善县| 公主岭市| 大庆市| 科尔| 金门县| 清原| 旺苍县| 广昌县| 沽源县| 和田县| 芒康县| 霸州市| 广汉市| 磐安县| 融水| 承德县| 阳新县| 健康| 芜湖市|