PlantUML 類圖語法指南

什麼是類圖?

一個 UML 類圖是物件導向建模的基礎結構藍圖。它透過視覺化系統中的類別、其內部屬性(資料欄位)、方法(函數)以及它們之間的結構關係,來呈現軟體系統。雖然程式碼庫可能變得龐大且難以解析,但清晰的類圖能為工程師提供即時的視覺參考,了解程式碼物件如何互動、繼承行為以及管理資料邊界。

使用 VPasCode,您可以完全以純文字設計詳細的類別佈局,將佈局工程、方框大小與行距完全交由我們整合的雲端引擎處理。

核心語法指南:元素與構造

要撰寫高品質的類圖,您需要理解三個核心結構標記:定義類別主體、為成員指派可見性修飾符,以及建立物件關係。

1. 聲明類別與成員

您可使用 class關鍵字來宣告標準的物件藍圖。在尾隨的大括號內,您可將欄位與方法分列於不同行:

class CustomerAccount {
    String accountId
    String emailAddress
    Boolean isActive()
}

2. 可見性修飾符(存取控制)

PlantUML 使用簡單的文字前置詞,將標準的物件導向封裝規則(public、private、protected 與 package-private)對應到欄位或方法名稱之前:

  • + 明確的公開存取(任何其他類別皆可存取)
  • - 嚴格的私有存取(僅在此特定類別內可存取)
  • # 受保護的存取(在此類別及其子類別內可存取)
  • ~ 套件/內部存取(僅在本地程式碼模組內可存取)

3. 定義物件關係

連結類別需要使用特定的箭頭符號,以表示應用程式碼的結構依賴性或組合關係:

  • 繼承 / 一般化 (是-一種): 使用一個開口的三角形箭頭,指向父類別:子類別 --|> 父類別
  • 實現 / 實作: 使用虛線搭配開口三角形來顯示介面的執行:具體類別 ..|> I介面
  • 組合 (嚴格擁有權): 使用實心菱形來表示子物件無法在沒有父容器的情況下存在:父容器 *-- 子物件
  • 聚合 (共用集合): 使用開口菱形來表示暫時性的集合關係:部門 o-- 員工

實用類別圖的最佳實務

  • 使用抽象類別分離佈局: 使用 抽象類別介面 關鍵字,以視覺方式區分您的結構邊界與具體的資料庫模型。
  • 盡早標示多重性: 始終在關係箭頭的兩端加上數值多重性(例如 "1""0..*")以明確呈現資料約束,讓開發人員清楚理解。
  • 控制垂直間距: 類別圖可能變得極其高。如果您的佈局垂直延伸過長,請將雙連線(--)改為單連線(-) 放在關係箭頭內,以強制並排水平對齊。

現實世界中的 PlantUML 類圖範例

範例 1:電子商務領域模型(可見性與封裝)

此藍圖展示了標準的存取修飾符、基本資料物件,以及核心線上購物實體之間的基本資料多重性對應關係。

@startuml
class User {
    - String userId
    - String hashedSecret
    + Boolean verifyLogin(String input)
}

class Order {
    + String orderId
    + Date timestamp
    - Double calculateTotal()
}

User "1" --> "0..*" Order : "下單並擁有"
@enduml

語法解析:- 前綴可確保如憑證等敏感欄位在User 類別區塊內完全私密,而公開存取函數則使用+ 標記。連接字串明確指出,一個使用者可輕鬆查詢零筆或多筆訂單。

範例 2:進階付款網關(繼承與介面)

此全面的軟體工程地圖展示了如何在統一框架內組織介面、類別繼承迴圈以及複雜的組合結構。

@startuml
interface IPaymentProcessor {
    + Boolean authorizeAmount(Double cash)
    + void captureFunds()
}

abstract class BaseGateway {
    # String merchantApiKey
    # String endpointUrl
    + void logTransaction(String payload)
}

class StripeGateway {
    - String stripeToken
    + Boolean authorizeAmount(Double cash)
    + void captureFunds()
}

class PayPalGateway {
    - String paypalEmail
    + Boolean authorizeAmount(Double cash)
    + void captureFunds()
}

class ShoppingCart {
    - List items
    + void checkout(IPaymentProcessor engine)
}

' 結構關係宣告
BaseGateway ..|> IPaymentProcessor
StripeGateway --|> BaseGateway
PayPalGateway --|> BaseGateway
ShoppingCart *-- IPaymentProcessor
@enduml

語法解析:..|> 符號確立了抽象類別實作了我們的主要根介面。實心三角形線(--|>)將子網關清晰地導入其基礎父類別,而實心菱形(*--)則宣告一個購物車在會話生命周期中,根本上擁有其支付引擎處理器。

返回頂端