亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

        2014-03-25 03:07:32張森鄧?yán)?/span>吳健朱明潔
        關(guān)鍵詞:模型

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        本文結(jié)合分布式對象模型框架需求和MDA思想,提出了一種新的代碼生成方法。主要包括:PIM建立、PIM到PSM的轉(zhuǎn)換和PSM到代碼的生成3個(gè)部分。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è)計(jì)的語言,該語言類似于IDL語言,具有很高的靈活性。②Ecore描述。Ecore是EMF(eclipse model framework,Eclipse模型框架)的元元模型,是UML的一個(gè)子集。開發(fā)人員可以使用EMF中的Ecore樹形樣本編輯器快速方便地建立分布式對象Ecore模型。然而,盡管它們均能詳細(xì)地描述分布式系統(tǒng)的對象信息,但是卻無法作為MDA中PIM到PSM映射轉(zhuǎn)換的輸入。為此,本文采用XML文件作為系統(tǒng)的標(biāo)準(zhǔn)描述文件。對于VDL描述文件,則需要進(jìn)行詞法分析和語法分析,將解析出的模型信息表述為XML文件。而對于Ecore描述,則可以使用標(biāo)準(zhǔn)XMI將Ecore表示的模型信息串行化成XML文件。以localclass對象模型Person為例,該對象具有2個(gè)屬性:①公有的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

        分布式對象模型代碼主要實(shí)現(xiàn)分布式對象的遠(yuǎn)程方法訪問和發(fā)布訂閱功能。遠(yuǎn)程方法訪問是借助CORBA來實(shí)現(xiàn)的,系統(tǒng)首先要生成IDL代碼,然后經(jīng)過IDL編譯器編譯形成Skeleton和Stub的C++代碼。因此需要將PIM轉(zhuǎn)換成CORBA平臺的IDL-PSM模型。而發(fā)布訂閱功能是單獨(dú)用C++語言設(shè)計(jì)實(shí)現(xiàn)的,所以還需要轉(zhuǎn)換成C++平臺的C++-PSM模型。為了PSM模型到代碼的生成,所以PSM模型也采用XML進(jìn)行描述。還以localclass對象模型Person為例,該對象會(huì)映射到一個(gè)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ī)則來進(jìn)行轉(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è)計(jì)PIM和PSM的元模型,然后再制定相應(yīng)的轉(zhuǎn)換規(guī)則,才能將輸入的PIM自動(dòng)轉(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屬性原封不動(dòng)地轉(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模板,并且代碼的動(dòng)態(tài)部分信息是由XML文件描述的,所以代碼生成可以采用XSLT/XML技術(shù)來生成模型代碼。

        XSLT代表eXtensible Stylesheet

        Language:Transformations(擴(kuò)展樣式表語言:轉(zhuǎn)換),是一種用來將一個(gè)XML文檔的結(jié)構(gòu)進(jìn)行轉(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é)點(diǎn)。在轉(zhuǎn)換過程中,XSLT處理器通過指令的XPATH表達(dá)式來定位到XML文檔中符合條件的節(jié)點(diǎn),然后把節(jié)點(diǎn)的值按照指令的規(guī)則內(nèi)容轉(zhuǎn)換到結(jié)果文檔中,從而形成程序代碼。

        3 結(jié) 論

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

        參考文獻(xiàn):

        [1] 肖寒. J2EE平臺下代碼自動(dòng)生成技術(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]. 朱冬東,呂俊輝,李玫,譯. 北京: 機(jī)械工業(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]. 計(jì)算機(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ū)動(dòng)架構(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ū)動(dòng)構(gòu)架[J]. 計(jì)算機(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è)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(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

        猜你喜歡
        模型
        一半模型
        一種去中心化的域名服務(wù)本地化模型
        適用于BDS-3 PPP的隨機(jī)模型
        提煉模型 突破難點(diǎn)
        函數(shù)模型及應(yīng)用
        p150Glued在帕金森病模型中的表達(dá)及分布
        函數(shù)模型及應(yīng)用
        重要模型『一線三等角』
        重尾非線性自回歸模型自加權(quán)M-估計(jì)的漸近分布
        3D打印中的模型分割與打包
        美女被插到高潮嗷嗷叫| 亚洲欧美日韩国产精品专区| 国产精品自在线免费| 国产精品国产三级国av在线观看 | 国产又爽又黄又刺激的视频| 99久久伊人精品综合观看| 爽妇网国产精品| 少妇的诱惑免费在线观看| 久久亚洲精品中文字幕蜜潮 | 中文字幕亚洲乱码熟女1区| 无码成人一区二区| 免费人成毛片乱码| 香蕉视频免费在线| 国产精品久久国产精麻豆| 免费观看国产短视频的方法| 欧美日韩色另类综合| 久久国产成人亚洲精品影院老金| 日本在线一区二区在线| 亚洲国产成人精品无码区在线播放| 在线亚洲午夜理论av大片| 久久国产免费观看精品| 日产一区二区三区的精品 | 精品久久久无码中字| 日韩一区二区肥| 伊人久久综合狼伊人久久| 国产精品久久久久久久久久红粉| 一本一道av无码中文字幕麻豆| 国产欧美日韩a片免费软件| 亚洲精品国产福利在线观看| 日本美女性亚洲精品黄色| 美女露出粉嫩小奶头在视频18禁| 99精品国产高清一区二区麻豆| 日本熟妇hd8ex视频| 国产91极品身材白皙| 最新日本一道免费一区二区| 国产黄色片在线观看| 日韩成精品视频在线观看| 无码专区一ⅴa亚洲v天堂| 国产真人无码作爱视频免费| 日韩在线视频不卡一区二区三区| 香蕉蜜桃av一区二区三区|