Mermaid
Mermaid 可讓您使用文本和代碼創建圖表和可視化效果。它是一種基於 Javascript 的圖表和圖表工具,可呈現受 Markdown 啟發的文本定義以動態創建和修改圖表。
UML類圖
在軟件工程中,統一建模語言(UML)中的類圖是一種靜態結構圖,它通過顯示系統的類,其屬性,操作(或方法)以及對象之間的關系來描述系統的結構。
類圖語法
UML提供了表示類成員的機制,例如屬性和方法,以及有關它們的其他信息。圖中一個類的單個實例包含三個隔離專區:
- 頂部的小節包含類的名稱。它以粗體和居中打印,並且第一個字母大寫。它還可能包含描述類性質的可選注釋文本。
- 中間隔間包含類的屬性。它們是左對齊的,首字母是小寫。底部的隔離區包含類可以執行的操作。它們也左對齊,首字母為小寫。
classDiagram
class BankAccount
BankAccount : +String owner
BankAccount : +Bigdecimal balance
BankAccount : +deposit(amount)
BankAccount : +withdrawl(amount)
定義一個類
定義類有兩種方法:
- 使用關鍵字class(如)明確定義一個類
class Animal
。這定義了動物類 - 通過它們之間的關系定義兩個類
Vehicle <|-- Car
。這定義了兩個類Vehicle和Car及其關系。
classDiagram
class Animal
Vehicle <|-- Car
命名約定:類名應由字母數字(允許使用Unicode)和下划線字符組成。
定義類成員
UML提供了表示類成員的機制,例如屬性和方法,以及有關它們的其他信息。
Mermaid根據括號 ()
是否存在來區分屬性和函數/方法。與一起()
被視為函數/方法,而其他被視為屬性。
有兩種定義類成員的方法,無論使用哪種語法定義成員,輸出都將相同。兩種不同的方式是:
- 使用:(冒號)后跟成員名稱來關聯一個類的成員,這對於一次定義一個成員非常有用。例如:
classDiagram
class BankAccount
BankAccount : +String owner
BankAccount : +BigDecimal balance
BankAccount : +deposit(amount)
BankAccount : +withdrawal(amount)
- 使用{}括號關聯類的成員,其中成員分組在大括號中。適合一次定義多個成員。例如:
classDiagram
class BankAccount{
+String owner
+BigDecimal balance
+deposit(amount) bool
+withdrawl(amount)
}
返回類型
(可選)您可以使用將要返回的數據類型結束方法/函數定義(注意:)方法定義的末尾和返回類型示例之間必須有一個空格:
classDiagram
class BankAccount{
+String owner
+BigDecimal balance
+deposit(amount) bool
+withdrawl(amount) int
}
泛型
List<int>
通過將類型包含在~
(tilde)中,可以使用通用類型(例如)針對字段,參數和返回類型定義成員。注意:目前不支持嵌套類型聲明(例如List<List<int>>
)
classDiagram
class Square~Shape~{
int id
List~int~ position
setPoints(List~int~ points)
getPoints() List~int~
}
Square : -List~string~ messages
Square : +setMessages(List~string~ messages)
Square : +getMessages() List~string~
可見性
要指定類成員(即任何屬性或方法)的可見性,這些符號可以放在成員名之前,但它是可選的:
可見性 | Java | UML |
---|---|---|
對所有類可見(公共的) | public | + |
僅對本類可見(私有的) | private | - |
對本包和所有子類可見(受保護的) | protected | # |
對本包可見(包內部) | 默認,不需要修飾符 | _ |
請注意,您還可以通過在方法的末尾添加以下符號來為方法定義添加其他分類器,即()
:
*
抽象,例如:someAbstractMethod()*
$
靜態,例如:someStaticMethod()$
定義關系
描述 | 描述 | 說明 | |
---|---|---|---|
<|-- | Inheritance | 繼承 | 一般而言,如果類A擴展類B,類A不但包含從類B繼承的方法,還會擁有一些額外的功能。 |
*-- | Composition | 組合 | |
o-- | Aggregation | 聚合 | 聚合關系意味着類A 的對象包含類B 的對象。 |
--> | Association | 單向關聯 | |
-- | Link (Solid) | 雙向關聯 | |
..> | Dependency | 依賴 | 如果一個類的方法操縱另一個類的對象, 我們就說一個類依賴於另一個類。 |
..|> | Realization | 實現 | |
.. | Link (Dashed) |
classDiagram
classA --|> classB : 繼承
classC --* classD : 組合
classE --o classF : 聚合
classG --> classH : 單向關聯
classI -- classJ : 雙向關聯
classK ..> classL : 依賴
classM ..|> classN : 接口實現
classO .. classP : Link(Dashed)
多重關系
類圖中的多樣性或基數表示一個類與另一個類的一個實例相鏈接的實例的數量。例如,一個公司將有一個或多個雇員,但是每個雇員只為一個公司工作。
多重符號被放置在關聯的末尾附近。
不同的基數選項是:
1
只有1個0..1
零或一1..*
一個或多個*
許多n
n {其中n> 1}0..n
0至n {其中n> 1}1..n
1至n{其中n> 1}
基數可以很容易地定義,方法是將基數文本放在引號內“在(可選)一個給定箭頭之前(可選)和(可選)之后”。
classDiagram
Customer "1" --> "*" Ticket
Student "1" --> "1..*" Course
Galaxy --> "many" Star : Contains
類上的注解
可以用一個特定的標記文本來注釋類,這個標記文本就像類的元數據,可以清楚地說明類的性質。一些常見的注釋示例可能是:
<<Interface>>
代表一個接口<<abstract>>
代表一個抽象類<<Service>>
代表一個服務類<<enumeration>>
代表一個枚舉
注釋定義在開頭<<和結尾>>中。有兩種方法可以向類添加注釋,並且無論使用什么語法,輸出都是相同的。這兩種方式是:
在定義類之后的單獨一行中。例如:
classDiagram
class Shape
<<interface>> Shape
在一個嵌套結構中,以及類定義。例如:
classDiagram
class Shape{
<<interface>>
noOfVertices
draw()
}
class Color{
<<enumeration>>
RED
BLUE
GREEN
WHITE
BLACK
}
注釋
可以在類圖中輸入注釋,解析器將忽略它們。注釋必須自己一行,並且必須以%%
(雙百分號)開頭。注釋開始到下一個換行符之前的任何文本都將被視為注釋,包括任何類圖語法
classDiagram
%% This whole line is a comment classDiagram class Shape <<interface>>
class Shape{
<<interface>>
noOfVertices
draw()
}