UML 图通常分为结构图,用于描述系统由什么组成,以及行为图,用于描述系统做什么。以下示例均采用同一个在线商店场景,以便进行比较和适配。此处引用的形式规范为 UML 2.5.1。
PlantUML 可直接渲染多种 UML 符号。少数专用图类型——尤其是配置文件图、复合结构图、通信图和交互概览图——可能采用实用的 PlantUML 近似表示法,而非专用图渲染器。注释中已标明这些情况。

结构图
1. 类图
展示系统的类、其数据与操作,以及关联、继承和组合等关系。可用于讨论领域模型或面向对象设计。

@startuml
class Customer {
+id: String
+email: String
+placeOrder(): Order
}
class Order {
+number: String
+status: OrderStatus
+total(): Money
}
class OrderLine {
+quantity: int
+unitPrice: Money
}
class Product {
+sku: String
+name: String
}
Customer "1" -- "0..*" Order : places
Order "1" *-- "1..*" OrderLine : contains
OrderLine "*" --> "1" Product : refers to
@enduml
解读如下:一个客户可以下多个订单;一个订单包含一条或多行;每一行指向一个产品。实心菱形表示组合关系:订单拥有其行。
2. 对象图
展示某一时刻的具体实例及其链接。适用于说明示例数据,或在特定场景下解释类模型。在 PlantUML 中,请使用对象表示法。

@startuml
object "alice:Customer" as alice {
id = C104
email = [email protected]
}
object "order:Order" as order {
number = O9001
status = PAID
}
object "line:OrderLine" as line {
quantity = 2
unitPrice = 19.99
}
object "mug:Product" as mug {
sku = MUG-01
name = Travel mug
}
alice -- order
order *-- line
line --> mug
@enduml
3. 组件图
展示可部署或可替换的软件部件及其依赖关系。可用于传达应用架构与集成边界。

@startuml
component "Web Store" as web
component "Order Service" as orders
component "Payment Adapter" as payments
database "Order DB" as db
cloud "Payment Provider" as provider
web --> orders : REST
orders --> db : SQL
orders --> payments : authorize
payments --> provider : HTTPS
@enduml
4. 复合结构图
展示分类器(如组件或类)的内部部件,以及这些部件如何通过端口连接。当内部协作比周围系统架构更重要时,此图尤为有用。
PlantUML 不提供普遍支持的专用复合结构语法。此类图风格的草图传达了各部分及其连接关系:

@startuml
allowmixing
skinparam componentStyle rectangle
class Car {
}
package "Car" {
component "engine : Engine" as engine {
portout p1
}
component "transmission : Transmission" as trans {
portin p2
portout p3
}
component "wheel : Wheel [4]" as wheels {
portin p4
}
p1 -- p2 : drives
p3 -- p4 : power
}
@enduml 请将其视为结构草图;它不显示正式的 UML 端口或连接器语义。
5. 部署图
将软件制品或服务映射到硬件节点和执行环境。用于说明软件运行位置以及运行时节点之间的通信方式。

@startuml
node "Customer device" as client {
artifact "Browser"
}
node "Cloud" {
node "Application host" as appHost {
artifact "Store API"
}
database "Order database" as db
}
cloud "External payment provider" as pay
client --> appHost : HTTPS
appHost --> db : SQL
appHost --> pay : HTTPS
@enduml
6. 包图
将模型元素分组到命名空间或层中,并显示这些组之间的依赖关系。用于解释代码组织和架构方向。

@startuml
package "store.web" {
class CheckoutController
}
package "store.application" {
class PlaceOrder
}
package "store.domain" {
class Order
class Product
}
package "store.persistence" {
class OrderRepository
}
CheckoutController ..> PlaceOrder
PlaceOrder ..> Order
PlaceOrder ..> OrderRepository
@enduml
7. 配置文件图
使用构造型、标记值和约束定义针对特定领域的 UML 扩展。当项目需要超越标准 UML 的一致建模词汇时,请使用它。
PlantUML 可以将配置文件概念以 UML 风格草图的形式展示,但这并非专用的配置文件图渲染器。

@startuml
class "«profile» StoreProfile" as Profile
class "«stereotype» «Service»" as Service
class "«stereotype» «Repository»" as Repository
class "«metaclass» Component" as Component
Profile ..> Service : defines
Profile ..> Repository : defines
Service ..> Component : extends
Repository ..> Component : extends
note right of Service
tagged value:
owner: String
end note
@enduml
行为图
8. 用例图
展示外部参与者及其与系统目标之间的交互。用于确定范围并以高层次方式捕获功能需求。

@startuml
方向:从左到右
参与者 客户
参与者 "支付提供商" 作为 Provider
矩形 "在线商店" {
用例 "浏览商品" 作为 Browse
用例 "下订单" 作为 Place
用例 "支付订单" 作为 Pay
用例 "追踪订单" 作为 Track
}
客户 --> Browse
客户 --> Place
客户 --> Track
Provider --> Pay
Place ..> Pay : <<include>>
@enduml
9. 活动图
对工作流程进行建模:包括动作、决策、并行路径和交接。适用于业务流程、操作程序或算法的控制流。

@startuml
开始
:选择商品;
:输入配送详情;
:计算总价;
if (商品是否可用?) then (是)
:授权支付;
if (支付是否获批?) then (是)
:创建订单;
:发送确认;
else (否)
:显示支付错误;
endif
else (否)
:显示不可用商品;
endif
结束
@enduml
10. 状态机图
描述实体可以处于的状态,以及导致状态转换的事件或条件。当对象的行为取决于其当前状态时使用。

@startuml
[*] --> 草稿
草稿 --> 待支付 : 提交
待支付 --> 已支付 : 支付获批
待支付 --> 已取消 : 支付被拒
待支付 --> 已取消 : 客户取消
已支付 --> 已发货 : 发货
已发货 --> 已送达 : 配送确认
已取消 --> [*]
已送达 --> [*]
@enduml
11. 序列图
按时间顺序显示参与者之间交换的消息。用于描述场景、API 调用流程或服务之间的交互。

@startuml
参与者 客户
参与者 "Web 商店" 作为 Web
参与者 "订单服务" 作为 Orders
参与者 "支付服务" 作为 Payments
客户 -> Web : 提交结账
Web -> Orders : 创建订单
Orders -> Payments : 授权支付
Payments --> Orders : 已批准
Orders --> Web : 订单确认
Web --> Customer : 显示确认
@enduml
12. 通信图
强调哪些对象进行协作以及它们之间的链接;消息编号显示交互的顺序。当协作参与者的网络比时间线更重要时使用。
PlantUML 的标准 UML 集中没有专用的通信图渲染器。此对象链接草图使用序列号标记消息:

@startuml
对象 客户
对象 WebStore
对象 OrderService
对象 PaymentService
客户 --> WebStore : 1: checkout()
WebStore --> OrderService : 1.1: createOrder()
OrderService --> PaymentService : 1.2: authorize()
PaymentService --> OrderService : 1.3: approved
OrderService --> WebStore : 1.4: confirmation
@enduml
13. 交互概览图
提供交互的高级控制流视图,将活动式流程与交互场景引用相结合。用于展示多个序列级场景如何融入更大的流程。
此 PlantUML 示例使用活动图作为概览,其中场景名称代表被引用的交互:

@startuml
skinparam conditionStyle InsideDiamond
title 交互概览图:订单处理系统
start
:客户下订单;
if (商品是否有库存?) then (是)
partition "sd 结账序列" {
:授权支付;
:扣减库存;
}
else (否)
partition "sd 缺货处理流程" {
:通知客户;
:生成供应商请求;
}
endif
fork
partition "sd 发货序列" {
:打包订单;
:发货到地址;
}
fork again
partition "sd 计费序列" {
:生成发票;
:发送收据邮件;
}
end fork
:关闭订单;
stop
@enduml 对于每个场景内部的详细消息交换,请创建单独的序列图。
14. 时序图
显示状态或值随时间轴的变化。用于时间敏感行为、协议、硬件交互,或涉及持续时间和截止日期的需求。

@startuml
robust "订单" as Order
concise "支付" as Payment
@0
订单为草稿
支付为空闲
@5
订单为待处理
支付为处理中
@10
支付已批准
@12
订单已确认
@enduml
选择图表类型
从您需要图表回答的问题开始:
-
系统中包含什么?类、对象、组件、复合结构、包、配置文件或部署。
-
系统做什么?用例、活动或状态机。
-
参与者如何协作?序列图、通信图、交互概览图或时序图。
确保每张图表专注于一个目的,在图表间使用一致的命名,并仅包含面向受众和当前决策所需的足够细节。PlantUML 代码片段是起点:请检查您的渲染器所支持的语法,特别是针对专用图表类型。












