軟體工程/UML/示例簡介
我們需要學習一個 UML 建模工具。StarUML[1]是一個免費的 UML 建模工具,功能非常強大,它允許進行正向和逆向工程。它支援 Java、C++ 和 C#。一個小小的缺點是它不再受支援,因此它僅限於 Java 1.4 和 C# 2.0,這非常不幸。
啟動 StarUML,在啟動時選擇“空專案”。然後在模型資源管理器中透過右鍵單擊“無標題”來新增一個新模型。之後,您可以透過右鍵單擊模型來建立各種 UML 圖表。
可以在以下 StarUML 教程中找到更多詳細資訊。 [2]
另一個 UML 建模工具,個人使用免費,是 objectiF。[3]要學習如何使用 objectiF,請檢視他們的教程。[4]
使用課堂上的餐館示例,使用 StarUML 或您喜歡的 UML 建模工具建立我們在課堂上建立的所有不同的 UML 圖表。
完成類圖後,嘗試“生成程式碼”功能。在 StarUML 中,您右鍵單擊類圖,然後選擇“生成程式碼”。檢視生成的類並將其與您的模型進行比較。
重要說明:餐館示例實際上不是一個很好的示例,因為它可能會讓你覺得角色變成了物件。它們不會。角色永遠不會變成物件,角色始終在系統外部,因此下面的俄羅斯方塊示例要好得多。
我們大多數人都知道俄羅斯方塊遊戲。[5] [6](然而,我有一些學生不知道,所以如果你不知道,請先了解它並玩一會兒,然後繼續這個實驗)。如果你還記得課堂上的內容,在發明 UML 時,三位先驅者從一個名為面向物件分析和麵向物件設計的東西開始。所以我們來做吧。
我們想編寫俄羅斯方塊遊戲。但在我們開始之前,我們需要分析一下游戲。我們首先需要識別“物件”,其次我們必須找出它們是如何相互關聯和交流的。因此,對於這個實驗,請執行以下操作
- 每組 5 到 6 名學生組成一個小組
- 觀察遊戲,嘗試識別物件,例如,掉落的磚塊就是物件
- 讓每個學生代表一個物件,例如一塊磚
- 那個學生/磚塊有哪些屬性?(顏色、形狀等)
- 可以有多少塊磚?它們是如何相互作用的?
- 玩遊戲的人也是一個物件還是一個角色?
- 玩家如何與磚塊互動?
- 磚塊的移動有哪些限制?你將如何實施它們?
- 你將如何計算遊戲的得分?
一旦你確定了所有物件,就開始玩真正的遊戲。對於這個遊戲,一個學生是“角色”,一個學生會寫分鐘(協議),其他學生將是物件(例如磚塊)。現在開始遊戲:角色和不同的物件透過相互交談進行互動。寫分鐘的學生將寫下誰對誰說了什麼,即物件與角色之間以及物件之間所說的所有內容。
至少玩一兩輪。你的模擬有效嗎?你遺漏了什麼嗎?也許你需要新增另一個物件,比如計時器。
現在我們需要建立遊戲和 UML 之間的聯絡。
- 用例圖:這非常簡單,你將角色識別為玩家,並寫下玩家可以執行的所有用例。你應該檢查的一個問題是計時器是否是角色。用例圖告訴你你的系統如何與其環境互動。繪製俄羅斯方塊的用例圖。
- 活動圖:從你的遊戲中,你會發現有一些重複,並且在遊戲的不同階段必須做出一些決定。這可以用活動圖很好地表示。為遊戲繪製一個高階活動圖。
接下來我們來談談我們的分鐘(協議):它包含了我們繪製序列圖和最終得到協作圖所需的所有資訊。
- 序列圖:看一下你的分鐘(協議)。首先,識別物件並將它們水平放置。然後逐行瀏覽你的分鐘。對於你的分鐘中的每一行,在你的序列圖中繪製相應的行。正如你所看到的,序列圖與分鐘是一一對應的。
- 協作圖:從序列圖很容易建立協作圖。做吧。
- 類圖(關聯):從協作圖中,你可以推斷出類和類需要的函式。至於屬性,有些你已經確定了(例如磚塊的顏色和形狀),其他的你需要思考一下。繪製類圖,併為每個類嘗試猜測什麼屬性是該類正常工作所必需的。
- 類圖(繼承):如果你對面向物件語言有更多經驗,你可以嘗試識別超類,即嘗試使用繼承來考慮物件的共同特徵。
如果你正確地完成了這個實驗,你將學到很多東西。首先,你已經看到,透過模擬,可以識別物件、物件之間的連線、隱藏的要求以及你假設中的缺陷。其次,使用仔細編寫的模擬協議足以建立序列圖、協作圖和類圖。所以建立這些圖沒有魔法,只是玩遊戲而已。雖然你可能認為這只是一個有趣或愚蠢的遊戲,但我建議你:在你開始的每個新專案中都玩這個遊戲。
- ↑ http://staruml.sourceforge.net/en/ StarUML - 開源 UML/MDA 平臺
- ↑ http://cnx.org/content/m15092/latest/ StarUML 教程
- ↑ http://www.microtool.de/objectif/en/index.asp objectiF - 使用 UML 進行模型驅動軟體開發的工具
- ↑ http://www.microtool.de/mT/pdf/objectiF/01/Tutorials/JavaTutorial.pdf 使用 UML 開發 Java 應用程式
- ↑ http://en.wikipedia.org/wiki/Tetris 俄羅斯方塊
- ↑ http://www.percederberg.net/games/tetris/index.html Java 俄羅斯方塊
- 說出兩位 UML 發明者的名字。
- 現在誰管理 UML 標準?
- 為“打磚塊”遊戲繪製一個用例圖。
- 看一下下面的活動圖。用你自己的話說描述一下資訊流。 # 在課堂上,我們介紹了餐館的例子,拉爾夫是想要吃晚飯的顧客。他的服務員是萊納斯,廚師是拉里,收銀員是史蒂夫。拉爾夫點了一份漢堡和啤酒。請畫一個序列圖,顯示從點餐到拉爾夫拿到他的啤酒和漢堡的步驟。
- 考慮下面的類圖。請編寫實現此類圖的 Java 類。 # 你應該為一臺自動取款機編寫程式碼。繪製一個用例圖。
- 將下面的序列圖轉換為類圖。
- 結構圖和行為圖有什麼區別?