亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

使用Rational進行C++轉換的技巧

2019-11-17 05:00:17
字體:
來源:轉載
供稿:網友
  UML 是一個通用的語言。使用 IBM? Rational Software Architect 和 IBM Rational Systems Developer,您可以實現由 UML 模型向 C++ 的轉換。這篇文章討論了如何更好地控制由 UML 向 C++ 轉換而生成的 C++ 代碼。文章分成幾個章節,各部分相對獨立,分別介紹了一種技巧。您可以根據需要選讀,而不必遵循特定的次序。

  應用 C++ Transformation 概要文件以實現 C++ 結構的建模

  在統一建模語言 UML 和某特定領域之間建立聯系的標準方法是使用 UML PRofile(UML 概要文件)。UML 概要文件可以為已有 UML 元素定義附加語義和特性,例如類、操作等。建模 C++ 特定元素的時候,如 結構體、聯合體、名字空間 等,需要用到 UML 概要文件。在 Rational Software Architect 和 Rational Systems Developer 使用 C++ Transformation profile 實現 UML 向 C++ 的轉換,這個概要文件在 UML 模型中的應用如下所示。

  在 Project EXPlorer 中選擇概要文件將要應用的 UML 模型。

  在 Project Explorer 保持模型是選中狀態,轉換到 Properties View,單擊 Profiles 選項卡。

  如圖1所示,單擊 Add Profile 按鈕。

  圖1. 將 UML 運用到 C++ Transformation 概要文件

  Applying the UML to C++ Transformation profile

  如圖2所示,從 Deployed Profile 下拉列表框中選擇 C++ Transformation。

  圖2. 選擇 C++ Transformation

  Sample UML2 Model

  導入 C++ 類型庫

  UML 提供了一組已定義好的類型,有 Boolean, Integer, String 和 UnlimitedNatural。而大多數的編程語言,包括C++,提供了更為豐富的基本類型。在 C++ 中建模的時候,您可能經常需要使用 C++ 預定義的原始類型(比如,將一個類型賦給某個屬性、參數、操作返回類型,等)。To import the C++ model library that is shipped with the C++ Transform,在 Project Explorer 中右鍵單擊UML模型,然后選擇 Import Model Library,如下圖3所示。

  圖3. 導入 C++ 類型庫

  Importing the C++ Type Library using the pop-up menu

  如圖4所示,從 Deployed Library 列表中選擇 C++ Types。

  圖4. 導入 C++ Type Library

  Importing the C++ Type Library

  在模型中創建 C++ 名字空間

  本章節講述如何在 UML 模型中為 C++ 名字空間建模。在 C++ 中創建一個名字空間時,需要將 cpp_namespace 原型應用在 UML 包。在 UML 向 C++ 轉換的過程中,一個 UML 包默認被映射成一個文件夾。假如想要將 UML 包映射成名字空間,而不是文件夾,那么,您需要應用 cpp_namespace 原型,然后設置 NamespaceName 的屬性,使其與指定的名字空間相關聯。這個 stereotyped UML 包下所有的 類、結構、枚舉 (以及其它)生成代碼之后,都將包括在這個名字空間中。

  您可能想知道為什么名字空間不能直接采用 stereotyped 包的名稱。這是為了支持 C++ 匿名的名字空間建模。所以,假如您將 NamespaceName 屬性設置為空,那么,該名字空間就會被認為是匿名的。

  建模 C++ typedefs

  要建模 C++ typedef,需要創建一個 UML 類并在其上應用 cpp_typdef 原型。該原型提供了以下屬性/值:

  arrayDimensions

  ImplementationType

  qualifier

  想要創建一個類型定義,比如 typedef int const IntMatrix100_20_t [10][20];,首先創建一個 UML 類 IntMatrix100_20_t,然后應用 cpp_typedef 原型。如圖5所示,設置該原型的屬性。

  圖5. 建立一個 C++ 類型定義

  C++ Typedef properties

  在將 typedef 定義與概要文件中提供的屬性相關聯的過程中,您可能會考慮到以下方式: typedef

  創建多維數組屬性

  在本節中,您將會學到如何為一個大小為[10][20][30]的三維數組定義屬性。在 Project Explorer 中選擇需要賦給多維數組的屬性。在 Properties 視圖中,單擊 Stereotypes 選項卡,然后單擊 Apply Stereotypes 按鈕,并選擇 cpp_type 原型。這個原型提供了以下屬性/值:

  arrayDimensions

  InitializerKind

  isAuto

  isMutable

  isRegister

  isVolatile

  qualifier

  如圖6所示,在 arrayDimensions Value 處,指定 [10][20][30]。這樣,在源代碼中就會生成維度屬性為[10][20][30]的數組。

  圖6. 設置 Multidimensional Attributes

  Setting Mutidimensional Attributes

  將一個方法的形參設置為常量

  這個技巧的原理同上(前面提到的定義多維數組)。在 Project Explorer 中選擇預備設置為 const 的參數。單擊 Apply Stereotypes 按鈕并選擇 cpp_type 原型。該類型提供了以下屬性/值:

  arrayDimensions

  InitializerKind

  isAuto

  isMutable

  isRegister

  isVolatile

  qualifier

  這些屬性都是可能用得到的,但暫時只介紹 qualifier 屬性。在 qualifier 的 Value 處,輸入 const (如 圖5 所示)。這樣,當轉換執行的時候,將在源代碼中為選定的參數生成帶有常量修飾符的函數簽名。

  注: 請確保輸入的值是有效的。假如輸入錯誤,則會導致編譯失敗,您需要在再次運行轉換之前修正錯誤。

  另外,cpp_type 原型也適用于類的屬性。但是,生成一個常量屬性的更簡單的方法是將屬性標明為 Read Only。

  將整個方法聲明為常量

  假設您想要將一個方法聲明為常量,以便在生成的代碼中帶有 const 要害字: )int Operation1(MyType Parameter1 const;。您需要在 Properties 視圖的 General 選項卡中選擇 Query 修飾符。這里,不需要應用原型。

  圖7. 創建一個常量方法

  C++ Const Method

  給一個方法增加異常處理

  Exceptions 是 UML 中重要的類,它在建模過程中不需要使用概要文件。為了簡化并推廣建模, UML to C++ Transformation 使用了普遍適用的 UML 屬性,而不是概要文件。要生成一個 throw 子句,比如 int Operation1() throw ( MyType);,您首先需要為操作創建一個參數,然后設置其 Is Exception 屬性為 true。

  在轉換過程中,參數名是可以被忽略的,但最好還是定義一個合適的名稱(以備異常拋出時正確提示)。圖8顯示了如何將參數的 Is Exception 屬性設置為 true。

  圖8. 設置某方法的 throw 類型

  Throw Clause for Method

  控制生成的代碼中的 include 聲明

  UML to C++ Transformation 可以自動生成恰當的 include 聲明。 然而,您可能想要根據需要生成更合適的 include 聲明。例如,已確定要使用本地方法體的某個類型變量,因此,想要生成包括在文件中的 include 聲明建模時,您可能需要創建兩個類之間的依靠,然后將 cpp_dependency 原型應用在依靠。這個原型和名為 IsInclusionInHeader 的屬性一起出現,該屬性值默認為 false。假如需要將 include 聲明包括在生成的文件體中,請將這個屬性值設為 false;假如需要將 include 聲明生成在頭文件中,那么,可以不設置依靠的 cpp_dependency 原型,也可以應用原型并將 IsInclusionInHeader 屬性值設為 true。

  使用文件級別得重用保護部分

  假如要使用標準庫的類型,或者一些源代碼的其它庫,您需要在模型中將這些類型設置為普通的字符串。例如,假如要將一個屬性聲明為整型,您需要在模型中指定它的類型為 vector 轉換時,將會把這些類型當成原始類型,并且不會生成任何 include 聲明或其它聲明。因此,您需要將這些都明確地包含進源文件中。

  比如,對于 vector 類型,您應當明確地將 include 聲明放置在源代碼中,比如 #include 。如列表1所示,在應用 UML 向 C++ 的轉換過程中,每個生成的文件都一字不漏地包含一些段落的內容。請注重 //TODO: Add definitions that you want preserved。您添加到 Begin section 和 End section 中的任何內容都將被保存下來。請在此處添加聲明,比如這里的 #include 。

  列表1. 類 Car 所生成代碼

  #ifndef CLASS1_H

  #define CLASS1_H

  //Begin section for file Class1.h

  //TODO: Add definitions that you want preserved

  //End section for file Class1.h

  #include "MyType.h"

  //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.C
  class Class1

  {

  //Begin section for Class1

  //TODO: Add attributes that you want preserved

  //End section for Class1

  public:

  //@generated "UML to C++ (com.ibm.xtools.transform.uml2.cpp.CPPTransformation)"

  int Operation1()const throw ( MyType);

  }; //end Class Class1

  #endif

  刪除類級別得重用保護部分

  請注重,在前面列表1的代碼中,有一段 //Begin section for Class1 ... //End section for Class1 ,您可以將 C++ 中所有不能建模的聲明保存在這里。返回 UML to C++ Transformation 時,不會覆蓋這段聲明。假如您不需要這一聲明出現在生成的代碼中,可以選擇刪除。但是,刪除之后,即使再次運行 UML to C++ Transformation,這些聲明也不會重新生成。

  假如不需要,可以刪除如列表2所示的段落,那么刪除之后不能夠重新生成。假使想要恢復這些聲明,您就需要手動地進行插入。

  列表2. 類 Car 生成的代碼

  ...

  //Begin section for Class1

  //TODO: Add attributes that you want preserved

  //End section for Class1

  ...

  不修改 UML 模型的情況下,改變生成包的名稱。

  要改變包的名稱,請雙擊打開轉換配置文件。如圖9所示,單擊 Mapping 選項卡,選擇 Enable mapping。

  圖9. 使用映射模型

  Enable Mapping Model

  單擊 New 按鈕,創建一個默認的映射模型,賦給一個適合的名稱。單擊 Edit Mapping 按鈕,出現如圖10所示的對話框。

  圖10. 編輯映射模型

  Edit Mapping Model

  假使您正進行到如圖11所示的 UML 模型。假如沒有映射模型,那么 Date 類將會生成在一個名為 Package1 的文件夾內。然而,假如您想要將 Package1 生成為 Folder1,那么需要使用映射模型。瀏覽映射模型,找到 Package1,然后在向導底端的 Mapped Name 編輯框輸入 Folder1。這樣,在生成的代碼中,Date 類就生成在名為 Folder1 的文件夾內了。

  圖11. 您正在操作的 UML 模型


  在同一個文件里生成多個類

  在映射模型中,假如您想將一個 UML 類映射為另外的名稱,您需要改變其將要生成文件的名稱,而不是類名。默認情況下,頂級類將生成一個與類名相同名稱的文件。因此,對于一個名為 MyClass 的 UML 類,UML 向 C++ 的轉換將會生成文件 MyClass.h 和 MyClass.cpp。

  但是,在使用映射模型的時候,您也可以選擇生成與原類名不同名稱的文件。比如,您可以改變 UML 包的名稱,生成另外命名的文件夾;您也可以將一個 UML 類映射為另外命名的文件。類的名稱并不受映射模型的影響。因此,要想在一個文件中生成多個類,您所需要做的僅僅是在映射模型中為它們指定相同的目標名稱。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品日本美女福利在线观看| 综合网中文字幕| 亚洲国语精品自产拍在线观看| 日韩av123| 亚洲男人天堂手机在线| 日韩欧美国产免费播放| 亚洲激情在线观看视频免费| 欧洲日本亚洲国产区| 色www亚洲国产张柏芝| 亚洲第一免费播放区| 性夜试看影院91社区| 午夜精品理论片| 亚洲欧美日韩国产中文| 中文字幕免费精品一区| 欧美成人手机在线| 国产精品第1页| 国产精品久久久久久久久久久不卡| 国产精品国模在线| 福利一区视频在线观看| 亚洲丁香久久久| 一本色道久久88综合日韩精品| 色综合亚洲精品激情狠狠| 7777kkkk成人观看| 中文字幕精品在线视频| 影音先锋欧美在线资源| 孩xxxx性bbbb欧美| 日韩中文字幕在线免费观看| 欧美性生交大片免网| 91九色国产在线| 亚洲影视中文字幕| 中文欧美日本在线资源| 精品无码久久久久久国产| 中文字幕免费精品一区高清| 精品久久久久久亚洲国产300| 国产精品v日韩精品| 91天堂在线观看| 欧美巨乳美女视频| 亚洲人成五月天| 视频在线观看99| 日韩在线观看av| 亚洲va久久久噜噜噜久久天堂| 亚洲精品国产成人| 欧美成人精品在线播放| 亚洲欧洲日韩国产| 亚洲欧美日韩天堂| 亚洲国产精彩中文乱码av| 91欧美精品午夜性色福利在线| 欧美丰满少妇xxxx| 久久久国产91| 亚洲第一区在线| 日韩国产欧美精品在线| 亚洲视频精品在线| 日韩美女写真福利在线观看| 91精品久久久久久久久久入口| 亚洲国产精品va在看黑人| 久久韩国免费视频| 日韩中文娱乐网| 欧美亚洲第一页| 国产成人综合亚洲| 一色桃子一区二区| 精品国产老师黑色丝袜高跟鞋| 日本免费在线精品| 午夜精品www| 国产aaa精品| 色樱桃影院亚洲精品影院| 欧美第一淫aaasss性| 久久这里有精品视频| 2023亚洲男人天堂| 777精品视频| 日韩精品中文字幕在线| 久久午夜a级毛片| 日韩av网站电影| 97avcom| 久久精品亚洲精品| 欧美激情在线播放| 亚洲老头同性xxxxx| 欧美日韩一区二区三区| 欧美成人三级视频网站| 国产精品久久久久久久久久| 国自产精品手机在线观看视频| 国产91精品黑色丝袜高跟鞋| 欧美极品第一页| 伊人一区二区三区久久精品| 2018中文字幕一区二区三区| 国产黑人绿帽在线第一区| 亚洲欧美日韩国产中文专区| 亚洲精品97久久| 2019中文字幕全在线观看| 午夜精品一区二区三区在线视| 国产精品成人免费视频| 亚洲免费中文字幕| 日韩欧美成人区| 成人中文字幕在线观看| 国产国产精品人在线视| 亚洲成人免费网站| 国产精品精品国产| 欧美性猛交xxxx乱大交极品| 91美女片黄在线观看游戏| 中文字幕久热精品在线视频| 亚洲美女av网站| 国产日本欧美一区| 欧美午夜视频一区二区| 久久躁日日躁aaaaxxxx| 国产精品自拍偷拍| 亚洲精品少妇网址| 欧美日韩国产一区二区| 欧美日韩精品在线| 一本一本久久a久久精品牛牛影视| 亚洲一级黄色av| 亚洲欧美激情四射在线日| 亚洲japanese制服美女| 色中色综合影院手机版在线观看| 精品久久久久久久大神国产| 色狠狠久久aa北条麻妃| 欧美激情视频网址| 欧美日韩aaaa| 国产精品第一视频| 97久久精品在线| 91精品国产免费久久久久久| 欧美性受xxxx白人性爽| 国产午夜精品视频免费不卡69堂| 国产精品一区二区三区久久久| 欧美重口另类videos人妖| 欧美日韩免费看| 日韩一区二区三区在线播放| 亚洲男人7777| 亚洲国产女人aaa毛片在线| 国产精品视频白浆免费视频| 日韩成人av网| 精品高清一区二区三区| 国产成人亚洲精品| 国产精品99导航| 97**国产露脸精品国产| 日韩电影网在线| 国产欧美一区二区| 精品国产1区2区| 精品福利樱桃av导航| 亚洲另类图片色| 78m国产成人精品视频| 亚洲欧美另类在线观看| 亚洲国产高潮在线观看| 中文字幕国产精品久久| 性欧美长视频免费观看不卡| 久久久久在线观看| 日韩精品中文在线观看| 日韩一区二区精品视频| 欧美中文字幕视频在线观看| 亚洲精品www久久久久久广东| 亚洲天堂av在线免费观看| 日本一区二区三区在线播放| 亚洲欧美国产一区二区三区| 亚洲精品小视频在线观看| 亚洲永久在线观看| 国产精品中文字幕在线| 久久久噜久噜久久综合| 欧美日韩中国免费专区在线看| 亚洲国产精品嫩草影院久久| 8090理伦午夜在线电影| 91成人性视频| 欧美日韩一区二区免费视频| 久久影视电视剧免费网站| 亚洲美女性视频| 欧美一级淫片丝袜脚交| 亚洲国产天堂久久国产91|