程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 在Rational中使用C++可視化

在Rational中使用C++可視化

編輯:關於C++

IBM ®Rational®Systems Developer 的 C++ 可視化(C++ Visualization)特性能夠讓您使用 C++ 代碼,利用一個類似 UML 的符號提供與 UML 建模相似的技巧。這篇文章展示了如何圖形化地表示(顯示) C++ 原理,發現並顯示它們在 UML 圖中的關系,創建新的 C++ 組件,直接從圖中編輯源代碼,創建關聯和導航特性。

C++ 可視化特性的介紹

IBM®Rational®Systems Developer C++ 可視化特性將建模技巧帶到使用 Eclipse C/C++ Development Toolkit (CDT),一個開放開發環境的 C++ 項目中來。通過為 C++ 源代碼創建 Unified Modeling Language 2.0 (UML 2) 代理組件使靈活建模在實況 C++ 項目上變為可能,這樣允許您把它們當作 UML 組件來使用。這些代理組件僅僅存在於這個圖中,它們在這裡被創建,而且不需要優先的,實體 UML 模型組件。

當您創建這樣一個組件時,可視化引擎只會查找那些已經被選中的代碼組件和與它有直接關系的組件。因此,它不會反對完成源代碼,除非您明確規定這個行為。這就是與逆向工程工具的不同之處。 圖形表示(顯示)的另一好處是它們總是與源代碼同步,這意味著 UML 圖,像 Class 或者 Topic 圖一樣,在變化發生時總能在代碼中反映這些變化。

這篇文章描述了 C++ 可視化特性在編程和編制代碼的日常活動中是怎樣起到幫助的作用的。

開始階段

關於 CDT 項目索引器

Rational Systems Developer C++ 可視化特性依靠 Eclipse CDT 索引器來獲取關於源組件的信息。因此,這篇文章推薦您激活項目的Full Indexing。您要麼在創建這個項目的時候來設置這個選項,要麼從這個項目的Properties頁面來設置。您還可以從 Preferences頁面為所有的 C++ 項目將完整索引器設置為默認的索引器(Main menu > Windows > Preferences > C/C++ > Indexer)。

在您的系統上安裝 Rational Systems Developer。

在這篇文章中導入 Eclipse CDT 程序庫項目下載的樣例,導入到您的 Rational Systems Developer 工作區。

在類圖上可視化 C++ 元素

Rational Systems Developer 支持這些元素:

C++ 類的可視化(圖形化表示),數據類型結構,枚舉以及 UML 分類符的類型定義。

Namespace 相當於一個 UML 包

文件和文件夾相當於 UML 工件

您可以在一個 UML 圖上可視化地表示這些元素,要麼通過彈出式菜單,要麼通過拖放地方式。

使用 C++ 元素彈出式菜單

C++ 可視化特性為 C++ 元素(參見圖1)提供了一個顯示上下文菜單選項,它可以讓您通過以下幾個步驟將C++ 元素顯示在新的或者現有的類圖上:

激活這個彈出式菜單。

選擇 Visualize > Add to New Diagram File > Class Diagram。

圖 1. 顯示彈出式菜單

圖 2 顯示了來源於顯象在一個圖中的樣本項目的分類 Book。圖標中可視化 C++ 元素與 UML 類在使用 C++ 特殊標符和結構上有所區分,它們顯示在表格 1中。

圖2. 一個 C++ 類顯示在 Class 圖標中

<

P>表格 1. C++ 元素的圖標和構造型

C/C++ 元素 圖標 構造型 <<class>> 結構 <<Struct >> 聯合體 <<Union >> 類型定義 <<typedef>> 枚舉 <<enum>> 命名空間 <<namespace>> 源文件 <<file>> 頭文件 <<header file>>

使用 UML 圖彈出式菜單

另一種顯示現存的 C++ 元素的方法是,使用一個 UML 圖的彈出式菜單。(請看 圖 3)

圖 3. 顯示現存的彈出式菜單

例如,通過使用這個選項,可以顯示來源於樣本項目的分類 LibraryEntry,按照下面幾個步驟:

從 UML 圖的彈出式菜單選擇Visualize Existing > C/C++ Type。

一個輸入選項對話框就會彈出 (圖 4),在這裡您可以鍵入這個類最初的幾個字符來使它顯示。對於這個例子,可以在選擇一個類型域中輸入 Li。

對話框將列出相匹配的條目。從這個匹配單中選擇LibraryEntry,然後點擊 OK。

圖 4. 輸入選擇對話框

圖 5展現了添加到這個圖中的最新可視化類。注意 Book和 LibraryEntry之間的繼承性關系將會自動顯象出來。

圖 5. 最新的類圖

拖放功能指令

Rational Systems Developer 通過將它們從 C/C++ 項目浏覽器或者 Project Explorer 拖放到這個圖的方式支持帶有現有圖的 C++ 元素。當顯示一個文件時,默認的選項是顯示這個文件中所有的元素。您可以通過以下這些步驟來更改這個行為:

在 C++ 建模Preferences 頁面更改設置,您可以從 Windows > Preferences對它進行訪問。

然後從 Preferences樹 (請看 圖 6)中選擇 Modeling > C++ Modeling。

圖 6. 從一個 C/C++ 文件中抽取元素的參數設置

浏覽這個圖中的源代碼

要將一個圖中的元素導航到與它相關的源代碼,您要麼雙擊這個圖的元素要麼使用它的彈出式菜單。

雙擊類、結構、聯合體、類型定義,或者它們的成員字段,將會定位到這個元素聲明的位置。

雙擊類成員程序將會導航到指令確定的位置,如果可能的話,或者會導航到這個這個程序聲明的位置。

C++ 可視化特性還提供了一個高級導航特性,稱作 Auto-Navigation(自動導航)。通過選擇這個圖工具欄中的 C++ Auto-Navigation圖標,可以選擇或者取消它的功能 (請看 圖 7a)。

圖 7a. Diagram 工具欄中的 Auto-Navigation 圖標

一旦激活,這個選項將把這個編輯窗口拆分為兩個部分,圖在上半部分,C++ 編輯器在下半部分,重點突出了在這個圖中所選元素的源代碼的位置(圖 7b)。

圖 7b. Auto-Navigation 屏幕截圖

顯示或者隱藏類圖中的相互關系

元素之間的關系可以通過使用 Class 圖中的彈出式菜單來顯示或者隱藏。例如,只想查看圖上元素之間的聯合關系:

右鍵點擊這個圖,並從彈出式菜單選擇 Filters > Show/Hide Relationship選項。

然後選擇隱藏除了關聯關系以外的所有關系,如圖 8所示。

圖 8. 顯示或隱藏關系對話框

顯示一個關聯或者屬性

兩個元素之間的關聯要麼顯示為這個類中的一個屬性,要麼顯示為這個相關元素的一個結合。例如,在這個圖上顯示這個類 Book。現在可以將 authorName域拖出這個類,如圖 9 所示。這樣將會作為一個聯合顯示它們之間的關系。還可以通過右鍵點擊這個屬性,然後從彈出式菜單中選擇 Filter > Show as Association來實現。

圖9. 通過拖放來顯示關聯

要想作為一個屬性來顯示一個關聯,右鍵點擊這個關聯然後從彈出式菜單中選擇 Filter > Show as Attribute,如圖 10所示。

圖 10. 顯示一個屬性操作

在 Class 圖中顯示相關的元素

Show Related Elements是 Rational Systems Developer 中一個十分有用的一個特性,它可以使您找到顯示在類圖上的 C++ 元素的相關 元素。運行這個操作:

右鍵點擊這個可視化元素

然後從彈出式菜單中選擇 Filters > Show Related Elements(圖 11)。

圖 11. Show Related Elements 菜單

這樣產生了 Show Related Elements對話框(圖 12),它預先規定了能夠幫助繼承性樹可視化過程的查詢系統,包括圖等等。通過使用這個自定義查詢系統,您可以控制類別,方向,以及您想要顯示的相關元素的深度。

圖 12. Show Related Elements 對話框

使用 Modeling Assistant

Show Related Elements 查詢系統還可以從建模助手來運行。例如,要查詢引入的相關元素,將鼠標放在元素上,雙擊這個彈出的引入箭頭的方框。這樣將顯示一個帶有可以運行的查詢列表的彈出式菜單(圖 13)。在引出箭頭上執行相同的操作將為引出的關系提供查詢。值得注意的是這些查詢都僅僅局限在一個水平,這意味著您不能選擇查詢的深度。

圖 13. 通過使用 Modeling Assistant 顯示 Related Elements(入向的)

研究 Browse 圖的代碼

Browse 圖都是非編輯的圖,這樣有助於從單個的焦點元素來探索它們之間的關系。要創建一個浏覽圖:

從一個元素的彈出式菜單中選擇 Visualize > Explorer in Browse Diagram。從 Project Explorer和 Diagrams視圖都可以做到。 圖 14 展示了 Book類的 Browse 圖。

圖 14. Book 類的 Browse 圖

要顯示關系的類型和深度可以通過浏覽圖工具條來控制(參見圖15)。浏覽圖的焦點元素可以通過雙擊來更改,雙擊浏覽圖中的元素可以使它變成新的焦點,或者通過使用彈出式菜單,如先前所述,來選擇這個新的焦點元素。例如,嘗試雙擊 LibraryEntry。

圖 15. 浏覽圖工具條

浏覽圖可以保持它所顯示視圖的歷史記錄,因此您可以從任何一個視圖向前或者向後導航。然而,您不能保存這個浏覽圖,但是您可以通過使用圖彈出式菜單中的 File菜單把圖的副本作為新的圖文檔或者圖片來保存。

動態圖例子:Topic 圖

ATopic 圖是一個基於查詢的非編輯性的圖,它能夠幫助查看元素之間的關系。要創建一個 Topic 圖:

從圖元素中選擇 Visualize > In Topic Diagram或者從 C/C++ 項目浏覽器或者從 Project Explorer中選擇 Visualize > Add to New Diagram File > Topic Diagram。例如,要為元素創建一個與 Book 和 LibraryEntry相關的 Topic 圖。

從浏覽器中選擇這兩者,右鍵點擊並出現彈出式菜單,然後選擇 Visualize > Add to New Diagram File > Topic Diagram,如圖 16 所示。這個操作將會導致彈出一個對話框,詢問創建這個 Topic 圖的名稱和位置。

對於這個練習,您可以接受默認值。這樣會出現一個 Topic 圖向導。在第一個屏幕中,選擇這個查詢程序來運行。例如,選擇Related Elements查詢程序(圖 17),然後點擊 Next。

下一個向導頁面將會使您自定義要顯示關系的深度和類別。對於這個例子,通過點擊 Finish接受默認設置。這樣就會創建顯示在圖 18 中的 Topic 圖。

圖 16. 創建新的 Topic 圖

圖 17. Topic 圖對話框

圖 18. Topic 圖

Topic 圖僅僅會在適當的環境中進行保存:這個元素最初被選定並且查詢開始運行。這個查詢系統包括相互之間的關系,加上您所選擇的查詢方向和深度。不像其它的圖,每次當一個主題圖被打開時,它就會自動運行查詢程序,並且更新這個圖來反映最新的源代碼。如果當圖打開後,一種關系已經更改,那麼您需要從彈出式菜單中選擇 Refresh,或者關閉再打開這個主題 圖來使其更新。當您創建一個主題圖後,可以通過使用圖彈出式菜單的 Customize Query選項對它進行自定義制定,這樣可以顯示 Topic Diagram 向導 圖 17的第二 頁面, 先前所顯示的)。

可視化編輯源代碼

通過使用選項板,Modeling Assistant,或者彈出式菜單,Rational Systems Developer 工具支持來自 Class 圖的 C++ 元素的創建和編輯。

創建新的 C++ 元素

可以通過使用 C/C++(圖 19)或者一個類圖的彈出式操作欄(圖 20)來創建一個新的 C++ 類或者枚舉。

圖 19. C/C++ 選項板

圖 20. 彈出式操作欄

例如,要創建一個新的源自於 LibraryEntry的名稱為 ElectronicMediaC++ 的類:

從選項板中選擇 C++ Class,然後點擊一個類圖。

這樣將會彈出 CDT New Class wizard(參見圖 21)。

鍵入這個類的名稱 ElectronicMedia。

現在,可以選擇這個基類,點擊Add按鈕,然後從對話框中選擇 LibraryEntry。

點擊 Finish。

您還可以在 New Class向導中更改創建的默認文檔,確定這個類所屬的字段名。

圖 21. CDT New Class 向導

接下來,創建一個代表 ElectronicMedia類型的新枚舉,您將為它命名為 EMediaType:

將鼠標指針移到 Class 圖的空白處。

當這個操作欄出現時,選擇這個棕色的E字母。(參見圖 20,如先前所顯示。)

這將啟動 New Enum 向導(圖 22)。鍵入名稱 EMediaType。

點擊 Finish。

提示:

您還可以在向導中更改創建的默認文檔,確定這個類所屬的字段名

圖 22. The New Enum 向導

添加元素

您可以通過使用這個彈出式菜單(圖 23)或者彈出式操作欄(圖 24),為可視化 C++ 類添加新的域和操作。

圖 23. C/C++ 為 C++ 類添加彈出式菜單

圖 24. C++ 類的彈出式操作欄

例如,添加一個類型 Publisher 的 protected 域到 ElectronicMedia類:

點擊類 ElectronicMedia的彈出式操作欄中的 Add Field圖標(請再次查看圖 24)。

在 New C/C++ Field 向導中鍵入 publisher作為名稱,顯示在 (圖 25)中。

要選擇 Publisher類型,點擊 Type Browse。

在 Type Selection對話框中,鍵入字母 P 來列出所有以 P開頭的元素。

從列表中選擇 Publisher,然後點擊 OK。

從 Access Visibility下拉框中,選擇 Protected。

點擊 Finish。

圖 25. 添加 Field 向導

類似地,添加一個叫做 Publisher getPublisher()的新方法到 ElectronicMedia類:

右鍵點擊這個類 ElectronicMedia,如圖中所顯示。

從彈出式菜單中選擇 Add C/C++ > Method,如先前圖 23所顯示的那樣。

在彈出的(緊接著是 圖 26)New C/C++ Method 向導中,鍵入 getPublisher作為這個程序的名稱。

選擇 Publisher作為返回類型,點擊 Return Type的 Browse按鈕。

在彈出的 Type Selection對話框中,鍵入 P 列出所有以 P開頭的元素。

從列表中選擇 Publisher並點擊 OK按鈕。

點擊 Finish。

圖 26. Add Operation 向導

這些操作將分別在 Add Field 向導中顯示,或者在 Add Operation 向導中顯示,如圖 25和圖 26所示。

添加枚舉文字

您還可以添加枚舉文字到顯示在類圖中的 enum元素,可以通過彈出式操作欄(圖27)或者彈出式菜單(圖 28)來實現。例如,添加一個新的文字 CD到 EMediaType:

將鼠標懸浮在可視化 EMediaType之上。

從彈出式操作欄中選擇 添加枚舉文字(圖 27)

在彈出的 Enumeration Literal向導(圖 29)中,鍵入文字名稱 CD。

點擊 Finish。

圖 27. 添加 Enumeration Literal 彈出式操作欄

圖 28. 添加 Enumeration Literal 彈出式菜單

圖 29. 添加 Enumeration Literal 向導

創建 C++ 元素之間的相互關系

您可以通過使用點擊-和-拖放的方法很容易地創建 C++ 元素之間地相互關系。這種關系地類型可以從 C/C++ Palette(參見圖 19,先前所示)中選擇。例如,要創建一個從 ElectronicMediaType到 Author的關聯關系:

從 C/C++ 選項板中選擇 Create Association(圖 19,如先前所示)。

點擊 ElectronicMediaType,並將這個元素拖放到 Author。

在彈出的向導中確定名稱,可見度,以及其它具體的細節 (圖 30)。

點擊 Finish。

圖 30. 創建 Association 向導

如果您願意,您可以通過使用 Modeling Assistant來代替創建它們之間的相互關系。利用這個工具,您可以創建已經存在在圖中元素或者新元素之間的關系,並且現有的元素不在這個圖上 。例如,要創建一個由 ElectronicMedia類繼承而來,叫做 EBook的新類:

將光標懸在 ElectronicMedia之上。

點擊引入的箭頭,從元素拖拽到一個空圖位置。這將產生一個彈出式菜單(圖 31)。

選擇 Create Inherits (Generalization) from > New Element: C++ Class。這將啟動 New Class 向導早期在圖 21中有所顯示。

鍵入 EBook作為名稱,然後點擊 Finish。

接下來,您將看到 Inheritance 向導,這時您可以確定可見度為 Public。

點擊 Finish。

圖 31. 利用 Modeling Assistant 創建一個與新類相關的繼承

圖 32. 創建 Inheritance 向導

要在圖上創建元素之間的關系,可以利用 Modeling Assistant:

在兩個元素之間要麼拖拽引入的要麼拖拽引出的箭頭。

然後選擇關系的類型,比如 Author 或者 Publisher,如圖 23所示。

圖 33. 利用 Modeling Assistant 創建關聯

更改成員的可視性

通過使用元素的彈出式菜單,很容易就可以從這個圖更改 C++ 類成員的可見度。例如,在 ElectronicMedia下,將 publisher域的可視性更改為 private,右鍵點擊這個域並從彈出式菜單中選擇 Visibility > Private,如圖 34 所示。

圖 34. 更改成員的可視性

更名重構

您可以利用元素的彈出式菜單,對顯示在圖中的一個元素進行重命名:Refactor > Rename。例如,將 ElectronicMedia的域類型 重新命名為 mediaType:

右鍵點擊這個域類型並選擇 Refactor > Rename,如圖 35所示。

鍵入新的名稱,mediaType,它將顯示在 Rename Refactor 向導中 (圖 36)。

選擇Preview 來預覽您的更改,然後點擊 OK。

圖 35. Rename 彈出式菜單

圖 36. Rename Refactor 向導

從一個圖中直接編輯

另一種對元素重命名的方法是直接從圖中進行編輯。您還可以利用這種方法來更改域類型和操作。例如,在 Library類下,更改 entries: int域的名稱和類型為 totalEntries:long,按照以下這些步驟:

選擇 Entries域。

點擊這個圖使圖文本為可編輯類型 (圖 37)。

鍵入新名稱和輸入格式為 totalEntries: long,然後按下 Enter鍵。

重點:

這是確定名稱和類型的 UML 方法。不要使用確定這個信息的 C++ 類型。

當您看到 Edit Preview對話框(圖 38)時,在那個對話框屏幕中點擊 OK。

圖 37. 操作中的圖內嵌編輯

圖 38. 編輯 Preview 對話框

在圖中直接重命名可以是一個簡單的重命名或者重構。您需要在 C++ 建模 Preferences頁面上設置這個選項。

選擇 Window > Preferences。

從這個樹中(圖 39)選擇 Modeling > C++ Modeling。

當您選擇Simple rename 時,只有表示位置在這個圖中的名稱才可以更改。

當您選擇 Refactor rename時,所有這個名稱的參考都會更改。

圖 39. C++ Modeling Preference 頁面

提示:

最好是利用 Preview選項來檢查這些更改。這是因為實際的源代碼和變量綁定可以更改,這是建立在環境或者構建宏預處理程序指令的時間定義的基礎上的。

收獲 UML 元素

Harvest 特性提供了一個從可視化 C++ 元素創建 UML 元素的方法。從圖中收獲的 C++ 元素可以作為新的 UML 元件粘貼到一個 UML 模型中。收獲的時候這些 UML 元素是 C++ 元素的副本,當源代碼更改時它們不會更改。例如,收獲 Book和 ElectronicMedia元素並將它們添加到 UML LibraryModel 模型:

選擇圖中您想要收獲的元素,右鍵點擊,並從彈出式菜單(圖 40)中選擇 Harvest。

一個對話框方框將會確認這個收獲操作,創建的這個 UML 元素將會放置在剪貼板上。

右鍵點擊 UML 叫做 LibraryModel的模型,然後選擇 Pas 圖Figure 41)。

這樣將會顯示 Paste Objects 對話框。選擇 Automatic Paste或者,如果您想要看到您正在粘貼的內容,相反就應該選擇 Visual Paste。

這個元素將會粘貼到這個模型,如圖 42所示。

圖 40. Harvest 菜單

圖 41. Harvest Paste 菜單

圖 42. 從 C++ 元素收獲的 UML 元素

注意這個元素的所有域和程序都已經拷貝到新的 UML 元素中。參考那些沒有被收獲的其它元素仍然涉及到實際的 C++ 元素。例如,如果您在圖上將 Author 域拖出收獲元素 之外,它將在源代碼中顯示與 C++ 元素的關聯,如圖 43所示。

圖 43. Harvest 關系

過程與收益總結

Rational Systems Developer 讓您通過使用 C/C++ Development Toolkit (CDT) 獲得了 C++ 項目的 UML 建模經驗。它讓您能夠在 UML 圖中使用 C++ 元素,比如 Class、Topic,以及 Browse 圖,因此提供了一個非常有用的特性能夠可視化地發現和研究這個項目中 C++ 元素之間地關系,與此同時,反映了此過程中任何源代碼地變更。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved