JavaRush /Java Blog /Random-TW /UML:從理論到實踐
Viacheslav
等級 3

UML:從理論到實踐

在 Random-TW 群組發布

介紹

我想每個人小時候都聽過這樣一句話:「測量兩次,切割一次」。在程式設計中也是如此。在花時間執行之前先考慮一下實施總是更好的做法。通常在實作過程中,您必須建立類別並發明它們的互動。通常,這種視覺表示可以幫助以最正確的方式解決問題。這就是UML幫助我們的地方。

什麼是UML?

如果您查看搜尋引擎中的圖片,就會清楚UML是關於圖表、箭頭和正方形的東西。重要的是 UML 轉換為統一建模語言。統一這個字在這裡很重要。也就是說,我們的圖片不僅可以被我們自己理解,也可以被了解 UML 的其他人所理解。原來這是一種繪製圖表的國際語言。

UML:從理論到實踐 - 1

正如維基百科所說

UML 是一種圖形描述語言,用於軟體開發、業務流程建模、系統設計和顯示組織結構中的物件建模。
並不是每個人都想到或意識到的最有趣的事情是 UML 有規範。此外,甚至還有 UML2 規範。有關該規範的更多詳細資訊可以在物件管理群組網站上找到。實際上,這個小組正在開發 UML 規範。同樣有趣的是,UML 不僅限於描述類別的結構。UML 圖有多種類型。UML 圖類型的簡要描述可以在同一維基百科中看到:UML 圖或 Timur Batyrshinov 的影片UML 圖評論。UML 也廣泛用於描述各種流程,例如:使用 JWT 的單一登入。回到 UML 類別圖的使用,值得注意的是《Head First: Design Patterns》一書,其中的模式是透過那些相同的 UML 圖來說明的。事實證明UML確實被使用了。事實證明,了解和理解其應用是一項非常有用的技能。

應用

讓我們看看如何從 IDE 使用相同的 UML。讓我們將IntelliJ Idea作為一個 IDE 。如果我們使用IntelliJ Idea Ultimate,那麼我們將開箱即用安裝「 UML Support 」外掛程式。它允許您自動生成漂亮的類別圖。例如,使用 Ctrl+N 或選單項目“Navigate”->“Class”我們轉到ArrayList類別。現在,透過類別名稱的上下文選單,選擇“圖表”->“顯示圖表彈出視窗”。結果,我們得到了一個漂亮的圖表:
UML:從理論到實踐 - 2
但如果你想自己畫,而你連 Idea 的終極版都沒怎麼辦?如果我們使用IntelliJ Idea Community Edition,那麼我們別無選擇。為此,您需要了解這樣的 UML 圖是如何建構的。首先,我們要安裝Graphviz。這是一組用於視覺化圖形的實用程式。它由我們將使用的插件使用。安裝完成後,您需要將Graphviz安裝目錄中的bin目錄加入您的PATH環境變數。之後,在 IntelliJ Idea 中,從選單中選擇“檔案”->“設定”。在「設定」視窗中,選擇「插件」類別,點擊「瀏覽儲存庫」按鈕並安裝PlantUML 整合插件。為什麼PlantUML這麼好?它使用一種稱為“”的圖形描述語言來描述 UML,這使得它更加通用,因為... 這種語言不僅被 PlantUML 使用。而且,我們下面所做的一切不僅可以在 IDE 中完成,還可以在線上服務planttext.com中完成。安裝PlantUML插件後,我們就可以透過「檔案」->「新建」來建立UML圖。讓我們建立一個「UML 類別」類型的圖表。在此過程中,會自動產生帶有範例的模板。讓我們刪除它的內容並創建我們自己的內容,並使用 Habr 的一篇文章:類別關係 - 從 UML 到程式碼。為了理解如何在文本中描述這一點,讓我們來看看 PlantUML 手冊:plantuml class-diagram。一開始有一個表格顯示如何描述連結:
UML:從理論到實踐 - 3
我們也可以在這裡查看連接本身:「UML 中類別之間的關係。範例」。基於這些材料,讓我們開始創建我們的 UML 圖。讓我們加入以下內容來描述這兩個類別:

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
若要在 Idea 中查看結果,請選擇「檢視」->「工具視窗」->「PlantUML」。我們只會得到兩個代表類別的方塊。眾所周知,這兩個類別都實作了 List 介面。這種類關係稱為實作。要描述這種連接,請使用帶有虛線的箭頭。讓我們來描述一下:
interface List
List <|.. ArrayList
List <|.. LinkedList
List- 兒童班之一Collection。也就是說,它繼承自Collection。這種聯繫稱為泛化。它看起來像一個帶有規則連續線的箭頭。讓我們來描述一下:
interface Collection
Collection <|-- List
對於以下類型的連接,請在類別描述中新增有關包私有元素陣列的 ArrayList項目:
~Object[] elementData
現在我們想要顯示ArrayList包含一些物件的內容。在這種情況下,連接類型將為聚合。本例中的單位是ArrayList,因為 它包含其他物件。我們選擇聚合是因為清單中的物件可以在沒有清單的情況下生存:它們不是清單的組成部分。他們的生命週期與清單的生命週期無關。聚合從拉丁語翻譯為“組裝的”,即由某物組成的某物。例如,生活中有一個抽油機,它由泵浦和馬達組成。裝置本身可以拆卸,留下一些組件。例如,出售或放入另一個單位。名單也是如此。這以單位附近的空菱形和連續線的形式表示。讓我們這樣描述它:
class Object{
}
ArrayList o- Object
現在我們想要表明,與 不同的是ArrayList,該類別LinkedList包含Node引用儲存資料的容器。在這種情況下,Node他們就是自己的一部分LinkedList,無法單獨生活。Node不是直接儲存的內容,而僅包含指向它的連結。例如,當我們新增到LinkedList一行時,我們會新增一個 new Node,其中包含指向該行的鏈接,以及指向上一行和下一行的連結Node。這種類型的通訊稱為組合。為了顯示複合材料(由多個部分組成的複合材料),需要繪製一個彩色菱形,並用一條連續的線通往它。現在讓我們將其寫為連接的文字顯示:
class Node{
}
LinkedList *-- Node
現在我們需要學習如何顯示另一個重要的關係類型—依賴關係。當一個類別使用另一個類,但該類別不包含正在使用的類別並且不是其後代時,將使用它。例如,LinkedList他們ArrayList知道如何創建ListIterator. 讓我們將其顯示為帶有虛線的箭頭:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
畢竟,它看起來像這樣:
UML:從理論到實踐 - 4
您可以根據需要了解盡可能多的細節。所有名稱均在此表示:「PlantUML - 類別圖」。此外,繪製這樣的圖表並沒有什麼超自然的,在執行任務時,您可以快速手繪它。這將培養您思考應用程式架構的技能,並幫助您儘早識別類別結構缺陷,而不是在您花了一天時間實現錯誤的模型之後。我認為這是嘗試一下的好理由?)
UML:從理論到實踐 - 5

自動化

有多種方法可以自動產生 PlantUML 圖。例如,Idea有一個SketchIT插件,但它不能完全正確地繪製它們。例如,介面的實作繪製不正確(顯示為繼承)。網路上也有一些範例,說明如何將其建置到專案的建置生命週期中。假設有一個使用uml-java-docklet的Maven範例。為了展示這是如何完成的,我們將使用Maven Archetype快速建立 Maven 專案。讓我們執行命令: 當要求選擇篩選器(選擇數字或套用篩選器)時,只需按 Enter 鍵即可保留預設值。這將始終是“ maven-archetype-quickstart ”。選擇最新版本。接下來我們回答問題並完成專案的創建: mvn archetype:generate
UML:從理論到實踐 - 6
由於 Maven 不是本文的重點,因此您可以在Maven 使用者中心找到 Maven 問題的答案。在產生的專案中,開啟專案描述檔pom.xml進行編輯。讓我們將uml-java-docklet 安裝說明中的內容複製到其中。在 Maven 中央儲存庫中找不到描述中使用的工件。但這對我有用: https: //mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0。也就是說,在該描述中,您只需將“ info.leadinglight ”中的groupId替換為“ com.chfourie ”,並將版本設為“ 1.0.0 ”。之後,我們可以在pom.xml檔案所在的目錄中執行這些命令:和。現在,如果我們開啟產生的文件(explorer target\site\apidocs\index.html),我們將看到 UML 圖。順便說一句,這裡的實作已經正確顯示) mvn clean installmvn javadoc:javadoc

結論

正如您所看到的,UML 允許您可視化應用程式的結構。而且,UML 不僅限於此。使用 UML,您可以描述公司內的各種流程或描述您正在編寫的函數在其中執行的業務流程。UML 對您個人有多大用處取決於您自己,但花時間更詳細地閱讀它無論如何都會很有用。#維亞切斯拉夫
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION