介紹
我想每個人小時候都聽過這樣一句話:「測量兩次,切割一次」。在程式設計中也是如此。在花時間執行之前先考慮一下實施總是更好的做法。通常在實作過程中,您必須建立類別並發明它們的互動。通常,這種視覺表示可以幫助以最正確的方式解決問題。這就是UML幫助我們的地方。什麼是UML?
如果您查看搜尋引擎中的圖片,就會清楚UML是關於圖表、箭頭和正方形的東西。重要的是 UML 轉換為統一建模語言。統一這個字在這裡很重要。也就是說,我們的圖片不僅可以被我們自己理解,也可以被了解 UML 的其他人所理解。原來這是一種繪製圖表的國際語言。
正如維基百科所說
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類別。現在,透過類別名稱的上下文選單,選擇“圖表”->“顯示圖表彈出視窗”。結果,我們得到了一個漂亮的圖表:
@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
畢竟,它看起來像這樣:
自動化
有多種方法可以自動產生 PlantUML 圖。例如,Idea有一個SketchIT插件,但它不能完全正確地繪製它們。例如,介面的實作繪製不正確(顯示為繼承)。網路上也有一些範例,說明如何將其建置到專案的建置生命週期中。假設有一個使用uml-java-docklet的Maven範例。為了展示這是如何完成的,我們將使用Maven Archetype快速建立 Maven 專案。讓我們執行命令: 當要求選擇篩選器(選擇數字或套用篩選器)時,只需按 Enter 鍵即可保留預設值。這將始終是“ maven-archetype-quickstart ”。選擇最新版本。接下來我們回答問題並完成專案的創建:mvn archetype:generate
mvn clean install
mvn javadoc:javadoc
GO TO FULL VERSION