de_DEen_USes_ESfa_IRfr_FRid_IDjapl_PLpt_PTru_RUvizh_CNzh_TW

使用 VPasCode 工具的 14 种 UML 图类型实用指南

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 代码片段是起点:请检查您的渲染器所支持的语法,特别是针对专用图表类型。