魏 菲,李慧,陳月娟,張京軍
(1.河北工程大學 信息與電氣工程學院,河北 邯鄲056038;2.邯鄲學院 計算機系,河北 邯鄲 056005)
MDA是近年來軟件工程中研究和實踐的熱點,模型在軟件開發過程中占有重要的地位。MDA開發過程的核心思想是:對系統進行需求分析和設計,建立反映系統核心業務思想的平臺無關模型PIM(Platform Independent Model),然后PIM經過MDA工具的轉換生成基于特定平臺的平臺相關模型PSM(Platform Specialize Model),PSM再經過MDA工具的轉換生成源代碼,最后進入代碼測試和維護,如圖1所示。

1)平臺無關模型PIM:平臺無關模型PIM是反映系統的主要業務的模型,是對業務需求的一種純理論的反映,根據準確的需求分析得到的結果來進行建模的,這個模型設計好后,可以供其它系統重復使用。
2)平臺相關模型PSM:平臺相關模型PSM是將PIM通過模型規則轉換成與特定技術和平臺相關的模型,比如基于.NET平臺、Spring平臺等。PIM可以轉換成一個或多個PSM。
建模和模型映射技術是MDA的核心技術,UML(Unified Modeling Language),MOF(Meta Object Facility)及 CWM(Common Warehouse Metamodel)是MDA主要使用的三項建模標準,作為PIM及PSM的建模基礎。
UML—統一建模語言:UML是一種元模型,UML模型的表達能力很強,會避免建模過程中不必要的信息丟失。
MOF—元對象設施:MOF用來定義面向對象元模型的基本元素、語法和結構[4]。它是一種面向對象的元—元模型,為規約面向對象元模型定義了一種公共的抽象語言。
班主任教育失誤后,要根據實際情況,有針對性地找學生談心,向學生解釋清楚嚴厲批評其是因為老師面對的不是一位學生,而是全班幾十位學生,老師想通過這件事使全班學生都受到教育,也許批評重了一些,希望其能諒解。通過講道理,循循善誘,動之以情、曉之以理,幫助學生消除心理障礙,提高思想認識,理解班主任的工作,愉快地接受教育,盡可能減少或消除內心的不滿。
CW M—公共倉庫元模型:CWM是一組元模型,目的是為了在數據倉庫工具、數據倉庫平臺和數據倉庫存儲之間建立一個商務智能元數據的交換機制[5]。它覆蓋了數據倉庫應用的整個生命周期。
ATL著重于模型與模型之間的轉換,其語法結構是基于OCL 2.0定義的,適用于表達MDA框架中的模型轉換。ATL主要分為三種類型:ATL模塊,ATL查詢,ATL庫。
ATL模塊符合模型到模型的轉換,通過這種ATL單元能夠制定從源模型元素產生目標模型元素的方法。ATL模塊的源模型和目標模型必須被各自的元模型“typed”。下面介紹下ATL模型的結構。
1)Header section:頭部分定義了符合源模型和目標模型轉換的模塊名字和變量名字,它也定義了模塊的執行模型。有關頭部分的語法定義如下:
module module_name;
create output_models[from|refines] input_models。
2)Import section:輸入部分可以做選擇性的輸入,它可以聲明必須輸入到哪個ATL庫中。ATL庫聲明式的實現如下:
uses extensionless_library_file_name。
3)Helpers:ATL的helpers可以視為java里的方法。helpers盡可能定義分解的ATL代碼。一個ATL helpers用下面的元素定義:一個名字,一個文本類型,一個返回值類型,一個ATL helpers代碼的表達式和一個可選的參數設置。例如,下面是一個返回兩個整數最大值的helper定義:
helper context Integer def:max(x:Integer):Integer=...;
helpers也可以定義一個不接受任何參數的helper。下面是對一個乘以2的整數值的helper定義:
helper context Integer def:double():Integer=self*2;
將以上二種定義混合的語法結構是:
helper def:max(x1:Integer,x2:Integer):Integer=...。
4)Rules:在ATL中存在二種不同類型的規則:匹配規則和調用規則,這二種規則符合通過ATL提供的二種不同的編程模型:宣稱性編程、命令式編程。
在ATL匹配規則中,ATL轉換的源模型元素不能被匹配,詳細設計源模型的匹配規則就是為了符合這種限制。另外,ATL匹配規則不能生成ATL原始類型的值。調用規則可以被看作helpers的一個特定類型:它們必須被明確地調用執行,而且它們可以接受參數。然而,相對于helpers,隨著匹配規則,調用規則可以生成目標模型元素。無論是從匹配規則或是其它的調用規則,一個調用規則必須在一個命令代碼部分中被調用。
ATL查詢用于一個模型到原始類型值的轉換,它可以看作從一系列源模型計算原始值的操作。普遍使用的ATL查詢是從一系列源模型中產生一個文本輸出。不過,ATL查詢不限于字符串值的計算,而且也可以返回數字值或是布爾值。下面分別介紹下ATL查詢的結構和執行語義。
ATL查詢結構:完成一個可選的輸入部分后,ATL查詢必須定義一個查詢實例。關鍵字查詢介紹了一個查詢實例,查詢實例指定了必須是由一個ATL表達式計算得到的結果。表達式如下:
query query_name=exp。
查詢執行語義:作為ATL模塊,ATL查詢的執行是在幾個連續的階段中實施的。第一階段是初始化階段,它對應著ATL模塊的初始階段,并認為是在ATL模塊文本中定義的初始化屬性。第二個階段是計算階段,通過執行ATL查詢中查詢元素的宣稱代碼去計算查詢返回值。需注意的是,在查詢文件中定義的helpers可以在初始化和計算階段中被調用。
最后的ATL單元類型是ATL庫,開發一個ATL庫可以定義一系列的ATL helpers,這些helpers可以被不同的ATL單元(包括模塊、查詢、庫)調用。一個ATL庫可以包括一個可選的輸入部分,除此之外,ATL庫定義了一些ATL helpers,這些helpers在導入庫的ATL單元中可使用。相比模塊和查詢,一個ATL庫不能被單獨執行。這說明,庫在執行時與其它初始化步聚不相關。由于缺少初始化的步聚,屬性helpers不能在ATL庫中定義。
目前主流的Atlas轉換框架[5]由ATLAS研究組、LINA&INRIA和法國Nantes大學共同研究得出,如圖2所示。框架中的源模型符合元模型a,它只能讀不能修改;目標模型符合元模型b,它只能寫。一個完整的Atlas模型轉換程序需要四個文件:元模型a、元模型b、源模型、模型轉換實例。源模型通過轉換生成的目標是目標模型。
轉換框架并沒有詳細的說明模型轉換方法,文獻[6] 中的例子也只是把簡單的類模型轉換為關系模型,并未給出轉換的詳細過程,類的元模型及關系元模型如圖3、圖4所示。目前在MDA的模型轉換這一階段,只是處于模型轉換的理論性研究,模型轉換技術尚未成熟。



本文針對文獻[6] 及目前國內外的研究現狀對模型轉換進行了改進,提出一個利用ATLAS轉換語言接收模型轉換信號進行轉換的思想框架。

當PIM模型向PSM模型轉換時,PIM模型發出一個要求模型轉換的信號,ATL接收到新信號時,就會判斷此信號是否為模型轉換的信號,如果是模型轉換信號,則接受信號,并利用ATL執行此信號的任務,進行PIM模型到PSM模型轉換,當完成任務后回到接收新信號的初始位置繼續等待新的信號。如果PIM模型發出的信號不是PIM要求模型轉換的信號,則進行判斷該信號是否為可行的信號,如果是可行信號,則直接返回入口端等待新的模型轉換信號;如果不是可行信號,則向數據庫報告此信號為不可行信號,數據庫內有不可行信號日志記錄,將不可行信號寫入日志是為方便再次接收到類似信號時可在入口端直接屏蔽以免浪費循環時間,然后返回入口處等待接收新的信號任務,按此順序循環下去,如圖5所示。此循環過程的思想也可以應用在PIM到PIM的轉換、PSM到PSM的轉換及PSM到PIM的轉換中。
理想的MDA模型轉換是利用模型轉換工具自動將 PIM轉換成相應的 PSM,但是目前支持MDA模型轉換的工具無法做到自動轉換。本文利用ATLAS轉換語言,在PIM向PSM轉換時判斷接收的信號是否為轉換信號,以便做出能否進行模型轉換的決定。研究提出了一個模型轉換的思想框架,為今后的模型開發提供借鑒與參考。
[1] OMG/OR MSC.Model driven architecture.[EB/OL] .[2001-07-0] .http://www.omg.org.
[2] 董建武.MDA:新一代軟件包互操作體系結構[J] .計算機工程,2003,29(2):3-4..
[3] 趙珂,韓業紅.MDA模型轉換的研究[J] .中國科技信息,2009(4):138-139.
[4] JOUAULT F,KURTEV I.Transforming models with ATL[C] .Berlin:Proc.of the Salellite Events on the 8th Int'l conf.on Model Driven Engineering Languages and Systems,2006(3):128-138.
[5] FRANKEL S.Model Driven Architecture:Applying MDA to Enterprise Computing[M] .Indianapol:John Witey and Sons,2003.
[6] JOUAU F,ALLILAIRE F,BEZIVIN J,et al.ATL:Amodeltransformationtool[J] .Science of Computer Programming,2008(4):31-39.