CodeGym /Java Blog /Toto sisi /UML 類圖
John Squirrels
等級 41
San Francisco

UML 類圖

在 Toto sisi 群組發布

介紹

我想每個人都聽過“兩次測量,一次切割”這句話。這是編程中的真實建議。在花時間執行它之前考慮一下實現總是更好。在實現過程中,您經常需要創建類並考慮它們將如何交互。這一切的直觀表示通常可以幫助您提出最正確的解決方案。這就是 UML 類圖對我們有幫助的地方。

什麼是 UML?

如果您查看搜索引擎中的相關圖像,您會發現 UML 與圖表、箭頭和正方形有關。您需要知道 UML 代表統一建模語言。統一是這裡的重要詞。這意味著我們的圖像不僅會被我們理解,而且會被任何了解 UML 的人理解。它是繪製圖表的通用語言。

根據維基百科,

“UML 是軟件工程領域的一種通用的、開發性的建模語言,旨在提供一種可視化系統設計的標準方法。”
最有趣的是 UML 有規範,但不是每個人都猜到的。甚至還有一個 UML 2 規範。有關規範的更多信息,請訪問對像管理組網站。事實上,這個小組開發了 UML 規範。同樣有趣的是,UML 並不局限於描述類的結構。UML 圖有很多種。維基百科對各種類型的 UML 圖有簡要描述:UML 圖。回到UML類圖,值得一提的是《Head First Design Patterns》這本書,它使用UML圖來說明設計模式。最重要的是,確實使用了 UML。事實證明,了解它並了解如何使用是非常有用的。

應用

讓我們弄清楚我們可以在 IDE 中使用 UML。我們將使用 IntelliJ IDEA 作為我們的 IDE。如果您使用的是 IntelliJ IDEA Ultimate,那麼我們將“開箱即用”地安裝“UML 支持”插件。它可以讓你自動生成漂亮的類圖。例如,使用 Ctrl+N 或“導航”->“類”菜單項轉到 ArrayList 類。現在在類名稱的上下文菜單中,選擇“圖表”->“顯示圖表彈出窗口”。結果,我們得到了一個漂亮的圖表。 UML:從理論到實踐 - 2 但是如果你想自己畫圖怎麼辦?如果您沒有終極版怎麼辦?使用 IntelliJ IDEA Community Edition,我們別無選擇。所以我們需要了解 UML 圖是如何組織的。第一的,. 它是一組圖形可視化工具。我們將使用的插件取決於它。安裝完成後,需要將Graphviz安裝目錄下的bin目錄添加到PATH環境變量中。之後,在 IntelliJ IDEA 中,選擇菜單中的文件 -> 設置。在“設置”窗口中,選擇“插件”類別,單擊“瀏覽存儲庫”按鈕,安裝PlantUML 集成插件。PlantUML 有什麼好處?它使用稱為“點”的圖形描述語言來描述 UML,這使得它更加通用,因為點語言不僅僅被 PlantUML 使用。更重要的是,我們在下面所做的一切不僅可以在 IDE 中完成,還可以在planttext.com上在線完成. 安裝 PlantUML 插件後,我們將能夠使用“文件”->“新建”創建 UML 圖。讓我們創建一個“UML 類”圖。這將自動生成一個帶有示例的模板。我們將刪除其內容並添加我們自己的內容。要了解如何在文本中表示它,請查看 PlantUML 手冊:plantuml 類圖。 UML:從理論到實踐 - 3依靠這些材料,讓我們開始創建我們的 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包含一些對象。這樣的話,就會有聚合關係。 數組列表是一個集合,因為它包含其他對象。我們說聚合是因為列表的對象可以在沒有列表的情況下存在:它們不是列表的組成部分。它們的生命週期與列表的生命週期無關。“聚合”一詞來自拉丁語,翻譯為“組裝”,即由某物組成的某物。比如在生活中,我們有一個水泵總成(骨料),它由水泵和電機組成。組件本身可以拆卸,我們可以不理會它的一些組件。例如,出售或投入另一個裝配體。在列表中也是如此。這用聚合處的空菱形和實線表示。我們將表示如下:

class Object{
}
ArrayList o- Object
現在我們要展示的是,與ArrayList不同,LinkedList類包含Node s — 引用存儲數據的容器。在這種情況下,NodeLinkedList的一部分,並不獨立存在。節點不是內容本身它僅包含對內容的引用。例如,當我們將一個字符串添加到LinkedList時,我們將添加一個新節點,其中包含對該字符串的引用,以及指向上一個和下一個節點的鏈接. 這種關係稱為組合。它是通過在復合材料(由組成部分製成的東西)上繪製一條帶有填充菱形的連續線來描繪的。現在我們將關係表示為文本:

class Node{
}
LinkedList *-- Node
現在你需要學習如何描述另一種重要的關係:依賴。當一個類使用另一個類,但該類不包含也不繼承所使用的類時使用它。例如,LinkedListArrayList知道如何創建ListIterator。我們將其表示為帶虛線的箭頭:

class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
完成所有這些之後,我們得到: UML:從理論到實踐 - 4您可以根據需要添加盡可能多的細節。當然,繪製這樣的圖表並沒有什麼超自然的。在處理自己的任務時,您可以用手快速將其繪製出來。這將幫助您培養思考應用程序架構的能力,並及早發現類結構中的缺點,而不是在您已經花了一天時間實現錯誤的模型之後。這似乎是嘗試它的一個很好的理由,不是嗎?:)

自動化

有多種方法可以自動生成 PlantUML 圖。例如,IDEA 有SketchIT插件,但它不能完全正確地繪製圖表。假設接口的實現繪製不正確(顯示為繼承)。Internet 上有如何將其集成到項目構建過程中的示例。例如,您可以找到如何將uml-java-docklet與 Maven 一起使用。為了演示,我們將使用Maven Archetype快速創建 Maven 項目。跑步

mvn archetype:generate
為響應選擇一個數字或應用過濾器,保留默認值 — 只需按 Enter 鍵。它將始終是“maven-archetype-quickstart”。選擇最新版本。接下來,我們將回答一些問題並完成項目的創建: UML:從理論到實踐 - 5Maven 不是本文的主題,因此您可以在Maven 用戶中心找到有關 Maven 問題的答案。在生成的項目中,打開項目描述文件 pom.xml 進行編輯。我們會將uml-java-docklet 安裝說明中的內容複製到此文件中。在 Maven 中央存儲庫中找不到描述中使用的工件。但以下對我有用:https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0. 換句話說,在描述中,您只需將 groupId 從“info.leadinglight”替換為“com.chfourie”並將版本設置為“1.0.0”。之後,我們可以在pom.xml文件所在的目錄下執行以下命令:

mvn clean install

mvn javadoc: javadoc
如果我們現在打開生成的文檔 (explorer target\site\apidocs\index.html),我們將看到 UML 圖。順便說一句,實現關係現在顯示正確了:)

結論

如您所見,UML 使您可以可視化應用程序的結構。但是 UML 可以做的更多。您可以使用 UML 來描述公司內部的各種流程,或者描述包含您正在編寫的功能的業務流程。您需要自己決定 UML 對您個人有多大用處,但無論您做出什麼決定,抽出時間進一步了解它都會很有幫助。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION