IBM Rational Software Architect 通過程式設計方式生成UML模型

myattitude發表於2009-05-26

為什麼您需要通過程式設計方式生成 UML 模型

統一建模語言(UML)在全世界範圍內,成為軟體開發專案方面廣泛採用的交流標準。在軟體專案中,UML 模型現在用於描述以及交流軟體產品,它從獲取軟體結構的需求出發,然後分析,設計,開發,部署應用,以及維護。

但是,在大多數情況下,專案中的資訊資源是用文字格式描述的,所以這些資源在 UML 中需要以最佳實踐方式表達出來,這樣就能與專案的其他成員順利交流。

例如,在設計團隊設計軟體時,提交給團隊之前,業務過程分析可能需要,將文字形式的業務過程描述轉化為 UML 活動圖。UML 活動圖對於構建人員與設計人員來說,表達的更加清晰與簡潔。業務分析員在理解業務過程描述,為每一個業務過程建立活動圖時,可能要花相當長的一段時間 。這時候如果有一個能由文字描述自動生成模型的工具,那無疑能有很大的幫助。 而 Rational Modeling Platform. API 通過簡單的 Java ™程式碼,就具有構建一個這種工具的能力


Rational 建模結構以及程式設計模型的簡介

Rational Modeling Platform. 是建立在 Rational 建模方案 的基礎之上。它最顯著的特性,和建模編輯器,檢視以及通過使用平臺提供的各種服務,來構建的工具一道,組成了一個 UML 建模器。 該平臺基於 Eclipse 技術,這是一個開放源工具整合平臺。Rational 建模方案包括了 Eclipse。

Rational Modeling Platform. 結構

Rational Modeling Platform. 覆蓋了大量的技術,這些技術可以分成兩組: Rational 建模元件以及 Eclipse 元件。接下來的章節,是在程式設計模型過程中,發揮過一定作用的每個元件的簡單概述。


圖 1. Rational Modeling Platform. 結構圖
Rational 元件頂部, Eclipse 元件底部

Eclipse 元件

  • Eclipse 平臺。Eclipse 技術的核心是 Eclipse 平臺。該元件包括構建使用者介面的框架,管理資源,座標構建器,整合偵錯程式,以及其他部件。Eclipse 平臺,擁有一個整合開發環境需要的全部基本框架。IBM Rational 建模方案,大量使用了該平臺提供的擴充套件效能。
  • Eclipse Modeling Framework(EMF。EMF 是一項用作 IBM Rational 建模方案中樞的整合技術。
  • UML 2 。UML 2 是一個基於 EMF 的 UML 2.1 子結構規格說明的實現。UML 是一種對分散式物件系統視覺化,說明,構建以及記錄的圖形化定義語言。Rational Modeling Platform. 為它的 UML 2.1 功能而使用該工具。
  • EMFT Transactions 。 EMFT 就是 Eclipse Modeling Framework Technology。該框架包含了補充管理基於 EMF 模型的一些技術。EMFT Transactions 元件,為建模管理(模型評估以及修改),提供了一個框架。Rational Modeling Platform. 為所有的模型管理使用 EMFT Transactions 。
  • EMFT OCL 。EMFT OCL 是一個基於 EMF 的 OCL 2.0 規格說明的工具。 Object Constraint Language (OCL)是一種用於描述應用於 UML 模型規則的規範語言。Rational Modeling Platform. 使用 EMFT OCL ,來對它管理的模型評估 OCL 效果,並在程式碼完成期間,驗證使用者輸入。
  • EMFT Validation 。EMFT Validation 是一種對 EMF 例項模型的可擴充套件的驗證框架。Rational Modeling Platform. 使用 EMFT Validation 來約束它管理的模型。特別值得一提的是,它使用框架根據官方規格說明來約束 UML 2 模型。
  • EMFT Query 。EMFT Query 是一種幫組轉移 EMF 模型例項的框架。它提供了一種 SQL-inspired 系列的類,以組織查詢,以及類的層級結構。 OCL 效果在模型轉移期間,支援作為一個過濾器。Rational Modeling Platform. 使用 EMFT Query 來在它管理的模型中,執行搜尋。
  • Graphical Editing Framework (GEF) 。GEF 為建立圖形編輯器提供了一個基礎。它包括了基於 模型-顯示-控制 (MVC)的框架,以及一個呈現分系統。Rational Modeling Platform. 在 GMF(Graphical Modeling Framework)元件中,為它的圖形工具而直接使用 GEF 。
  • Graphical Modeling Framework (GMF) 。GMF 是一個建立圖形化建模編輯器的框架。它包括了兩個主要的部分:一個執行時元件,以及一個工具元件。執行時部分提供了,支援可擴充套件的基於 GEF 和 EMF 建模圖形,所需要的基礎。工具部分能夠從各種輸入模型中,生成一個這樣的編輯器。Rational Modeling Platform. 可擴充套件的使用 GMF 執行時元素。

Rational Modeling Platform. 元件

Rational Modeling Platform. 元件涉及到三層: UML Modeler, UML Modeling 層,以及 Domain Modeling 層。

  • UML Modeler 層。UML Modeler 層包含了,管理平臺的 UML 建模環境所需要的類和介面。類 UMLModeler 是一個控制建模器的 UML 模型的生命週期以及概述的切入點。另外, 該層還為與 UML 模型交流需要的各種類,提供了訪問方法。
  • UML Modeling 層。 UML Modeling 層包括了與 UML 模型與圖協同工作的幫助元件。例如,它包括了在模型中幫助找到 UML 物件的元件,幫組使用 UML 元素種類(例如,獲得節點,控制節點,註釋)的元件,以及幫組尋找,建立,編輯或者分析圖的元件。
  • Domain Modeling 層。 Domain Modeling 層涵蓋了各種對生成任意基於 EMF 建模編輯器有用的服務。

    Rational Modeling Platform. API 術語以及概念

    在開始使用 Rational Modeling Platform. API 之前,瞭解怎樣管理模型非常重要。接下來的列表包含了,一些您需要了解的重要術語以及概念。

    • Rational Modeling Platform. 模型 。Rational Modeling Platform. 管理的模型 ,是 EMF 模型的例項。例如, Rational Modeling Platform. 中的每一個 UML 模型,都是一個基於 EMF 的 UML 模型的例項,該模型可通過 UML 2 中的org.eclipse.uml2.uml外掛獲得。該外掛是官方 UML 2.0 規格說明的一個工具。UML 模型通過使用 Java 介面來閱讀和修改。Model 管理主要通過 UMLModelerJava 類來進行。這是一個顯示模型以及概述生命週期操作,並提供建模平臺訪問方式的實用類.。
    • Rational Modeling Platform. 編輯域。EMF 引入了一個編輯域(editing domain) 概念,以控制模型的生命週期。一個編輯域管理一系列自包含的相關 EMF 模型,以及修改模型的 指令(commands)。Rational Modeling Platform. 的 UML 建模器使用的編輯域,可通過 UMLModeler.getEditingDomain()方法獲得。
    • Commands 。一個 command 對模型的修改具有作用。 一個命令通過 Command Java 介面表達。
    • Command stacks 。一個 command stack 是指與編輯區相關的特性。命令集包含了用於修改模型的命令,這些模型是被編輯域控制的。一個命令集是由 CommandStackJava 介面表達的。
    • Rational Modeling Platform. 圖。Rational Modeling Platform. 圖基於 GMF 符號模型。 一個 GMF 註釋提供了描述圖的基本物件。它定義節點,邊緣,形式,以及其他系列化圖框架所需的圖形資訊。在 Rational Modeling Platform. 中,圖是作為註釋,而向 UML 模型元素新增的,並持續存在於 UML 建模檔案(.emx 檔案)中。Java 介面 IUMLDiagramHelper 用於管理 Rational Modeling Platform. 圖。

      程式碼物件示例以及概述

      下面的 Java 程式碼示例,演示了 Rational Modeling Platform. API 的使用。該程式碼是通過 IBM®Rational®Software Architect 中的一個 Java Pluglet 顯示的 。Pluglets 是一種小型的 Java 程式,用於以一種簡單而直接的方式,來對工作臺作出一些微小的擴充套件。Pluglets 用 Java 寫成,並置於一個 pluglet 專案中。 pluglet 可以用工作臺的相同示例測試,就像任何其他 Java 應用軟體一樣。Pluglet 作者可以使用 Java 開發環境,並且他們可以訪問 Rational Modeling Platform. 軟體程式設計介面(APIs)。

      程式碼示例從一個文字檔案中,閱讀業務過程步驟,併為 Rational Software Architect 中的該過程,建立一個 UML 活動圖框架(每一步過程都對應著一個活動節點)。為了建立這個圖,程式碼使用 Rational Modeling Platform. API ,以管理 Rational Modeling Platform. 模型,圖以及模型元素。

      程式碼示例概述

      為了更好的理解程式碼,建議您瀏覽一下 pluglet 程式碼的 UML 序列圖。該圖以一張 JPG 圖片的方式顯示,並在 下載 部分中作為文章的附屬材料。

      pluglet 是 pluglet 類的 plugletmain() 方法的執行切入點:GenerateActivityDiagram。程式碼從獲得 Rational Modeling Platform. UML Modeler 編輯域開始。如上所述,編輯域用於管理 Rational Modeling Platform. 模型。列表 1 中的程式碼行獲得了建模編輯域:


      列表 1. 獲得 UML Modeler 編輯域
      				
      TransactionalEditingDomain editDomain = UMLModeler.getEditingDomain();
      			

      接下來的一步是模型管理。根據 Rational Modeling Platform. 程式設計模型,模型管理通過定義與執行命令來完成,這些命令來自與編輯域相關的命令集。最簡單的方式,是擴充套件 RecordingCommand 類,並執行 doExecute() 抽象方法,來完成需要的模型改變。列表 2 中的程式碼片段,建立了一個新的 RecordingCommand,執行 doExecute() 方法,並通過訪問 execute() 方法,來執行命令,該方法位於與 UML Modeler 編輯域相關的命令集。


      列表 2. 獲得一個特定的 UML 模型並對它進行編輯
      				
      editDomain.getCommandStack().execute(new RecordingCommand(editDomain, undoLabel) {
      
          protected void doExecute() {
      
              Collection models = UMLModeler.getOpenedModels();
              for (Iterator iter = models.iterator(); iter.hasNext();) {
      
                  Model model = (Model) iter.next();
                  out.println(model.getName());
      
                  if (model == null )
                      out.println("Could not open model");
                  else{
      
                      //Start operating on models having the name  "*Test*"
                      if (model.getName().indexOf("Test") != -1){
                          createProcessActivityDiagram(model);
                      }
                  }
              }
      
          }
      });
      			

      前面程式碼中的 doExecute()方法,獲取了所有當前在 Rational Modeling Platform. 環境(Rational Software Architect)環境中開啟的模型。接下來,它對這些模型進行迭代,對於每一個以“Test”作為名字一部分的模型,它執行 createProcessActivityDiagram() 方法,傳遞管理作為一個引數的模型示例。該方法從一個外部文字文件中閱讀業務過程步驟示例,並向作為一個引數傳遞的模型,新增一個新的活動圖。新建立的活動圖包含了,為從文字檔案中讀取的每一個業務過程步驟設定的節點。接下來是一個 createProcessActivityDiagram() 方法的具體解釋。

      方法 createProcessActivityDiagram() 做了所有的模型管理工作。最初,它向進行中的模型新增一個新的 UML 包裹 ,package1。接下來,它向新建立的包裹,新增一個新的 UML 活動 ,Activity1,然後它建立一個新的 UML 活動圖,ActivityDiagram1,並將其新增至 UML 活動。然後,過程步驟從文字檔案中讀取,一個活動節點為其中的每一步新增至 Activity1。最後,通過使用 IUMLDiagramHelper 介面方法 layoutNodes(),圖中為活動建立的節點,為顯示而作出調整。瀏覽列表 3 中的程式碼片段。


      列表 3. 修改 Rational Software Architect 中的 UML 模型並新增包裹,活動,圖,以及活動節點
      				
      //Create a package to hold the activity diagram
      Package aPackage = addPackage(model, "package1");
      
      //Add an activity "Activity1" to the package
      Activity activity1 = addActivity(aPackage, "Activity1");
      
      //Add an activity diagram to the activity
      Diagram diagram = addActivityDiagram(activity1, "ActivityDiagram1");
      ...
      
      //Read process steps from a file...
      in = new BufferedReader(new FileReader("..."));
      
      ...
      
      while((actionName = in.readLine())!=null){
      
          //Add an action to the activity
          addAction(activity1, actionName);
      }
      ...
      
      //Adjust diagram layout
      UMLModeler.getUMLDiagramHelper().layoutNodes(diagram.getChildren(), "DEFAULT");
      ...
      			

      如果您想得到關於 addPackage()addActivity()addActivityDiagram(),以及 addAction() 更多的細節資訊,您可以閱讀 Rational Modeling Platform. API 檔案(參見參考資源)。完整的程式碼可由這裡獲得(參見下載部分)。

      執行示例程式碼

      先行條件

      該程式碼是用 Rational Software Architect V7.0.0 開發與測試的。確保在執行程式碼之前,您已經安裝了 Rational Software Architect 的以下可擴充套件性特性:

      • Pluglets
      • Plug-in Development Environment
      • Eclipse Technology Extensibility
      • Modeling Extensibility

      通過以下步驟,執行示例程式碼:

      1. 切換至 Rational Software Architect 的 Modeling 視角。
      2. 向 Rational Software Architect 引入 ModelGenProj 專案。
        1. 選擇 File > Import
        2. Import 對話方塊中,選擇 Other > Project Interchange 並點選 Next
        3. 在 Import Project Interchange Contents 對話方塊中,指向檔案 ModelGenProj.zip,檢查 ModelGenProj 條目並點選 Finish
      3. 開啟 GenerateActivityDiagram.java 檔案,它位於 com.gbm.rational.support 包裹中。確保 pluglet 程式碼定義的過程步驟檔案的路徑,指向了正確的位置。該位置在列表 4 所示的程式碼行中得以定義。您要麼可以在程式碼中編輯檔案位置,要麼可以在您的檔案系統中建立一個資料夾結構,該檔案系統在程式碼中與參考的路徑一起編輯。


      列表 4. 指定輸入檔案路徑

      				
      in = new BufferedReader(new FileReader("..."));
      			

      1. 通過在位於 ModelGenProj > Models > Test 之下的 Rational Software Architect Project Explorer 中雙擊一個名為 Test 的模型,來開啟它。確保這是 Rational Software Architect 中唯一開啟的模型,因為 pluglet 程式碼會處理,所有開啟的以字串“Test”作為名字一部分的模型。
      2. 在 Project Explorer 中,右擊 GenerateActivityDiagram.java 檔案,並選擇 Run As > Pluglet
      3. 在執行程式碼後,檢查您的 UML 模型。您會發現一個新建立的包裹,以及一個建立用於顯示 steps.txt 檔案中定義的過程步驟的UML 活動圖。該檔案包含了一列建模的過程步驟,每一個單獨成行。為了在 Project Explorer 中檢查建立的 UML 圖,進入 ModelGenProj > Diagrams > Test 並雙擊 UML 圖 package1:Activity1: ActivityDiagram1


      作者:Ahmed Makady, GMSR 合作伙伴, Gulf Business Machines

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14780914/viewspace-604217/,如需轉載,請註明出處,否則將追究法律責任。

相關文章