UML(统一建模语言)2.0中定义了14种不同类型的图表,用于从不同角度描述系统。这些图表分为结构图和行为图两大类。
可使用 PlantUML 绘制 UML 中的各种类型的图表:https://plantuml.com/zh/
PlantUML是一个通用性很强的工具,可以快速、直接地创建各种图表,如序列图、用例图、类图、对象图、活动图、组件图、部署图、状态图、时序图等,其他图支撑不太好,需要使用前面的图进行模拟。
结构图(Structure Diagrams)
结构图主要描述系统的静态结构:
1. 类图(Class Diagram):
- 显示系统中的类、接口及它们之间的关系
- 展示属性、方法和关系(如继承、实现、依赖等)
- 是UML中最常用的图表之一
ASCII图示:
+--------------------+
| Customer |
+--------------------+
| -name: String |
| -id: int |
+--------------------+
| +getName(): String |
| +setName(String) |
+--------------------+
▲
|
+--------------------+
| VIPCustomer |
+--------------------+
| -level: int |
+--------------------+
| +getDiscount() |
+--------------------+
PlantUML生成图:
@startuml
class Customer {
-name: String
-id: int
+getName(): String
+setName(String)
}
class VIPCustomer {
-level: int
+getDiscount()
}
Customer <|-- VIPCustomer
@enduml
2. 对象图(Object Diagram):
- 类图的实例,显示系统某一时刻的对象状态
- 表示对象之间的实际关系和具体属性值
ASCII图示:
+--------------------+
| customer: Customer |
+--------------------+
| name = "张三" |
| id = 12 |
+--------------------+
PlantUML生成图:
@startuml
object 对象1
对象1 : name = "张三"
对象1 : id = 12
object "第 2 个对象" as o2
o2 : name = "李四"
o2 : id = 23
@enduml
3. 组件图(Component Diagram,构件图):
- 展示系统的组件及其依赖关系
- 表示软件系统的物理结构和组织
ASCII图示:
+-----------------+ +-----------------+
| <<组件>> | | <<组件>> |
| Web UI | | 业务逻辑层 |
+-----------------+ +-----------------+
| |
| <<使用>> | <<使用>>
v v
+-----------------+ +-----------------+
| <<组件>> | | <<组件>> |
| 用户服务 | | 数据访问层 |
+-----------------+ +-----------------+
|
| <<使用>>
v
+-----------------+
| <<组件>> |
| 数据库 |
+-----------------+
PlantUML生成图:
@startuml
skinparam component {
BackgroundColor<<组件>> White
BorderColor Black
}
[Web UI] <<组件>> as webui
[业务逻辑层] <<组件>> as business
[用户服务] <<组件>> as userService
[数据访问层] <<组件>> as dataAccess
[数据库] <<组件>> as database
webui -down-> userService : <<使用>>
business -down-> dataAccess : <<使用>>
dataAccess -down-> database : <<使用>>
@enduml
4. 部署图(Deployment Diagram):
- 描述系统运行时的物理架构
- 显示硬件节点、软件组件的分布及它们的关系
ASCII图示:
+---------------+ +---------------+
| Web Server | | App Server |
| +--------+ | | +--------+ |
| |Web App | |------>| |Business| |
| +--------+ | | |Logic | |
+---------------+ | +--------+ |
+-------+-------+
|
v
+---------------+
| Database |
| Server |
+---------------+
PlantUML生成图:
@startuml
node "Web Server" {
component "Web App"
}
node "App Server" {
component "Business Logic"
}
node "Database Server" {
database "Database"
}
"Web Server" --> "App Server"
"App Server" --> "Database Server"
@enduml
5. 复合结构图(Composite Structure Diagram,组合结构图):
- 展示类或组件的内部结构
- 显示各部分如何相互协作
ASCII图示:
+-------------------------------+
| 电脑系统 |
| |
| +-------+ +---------+ |
| | CPU |<------>| 内存 | |
| +-------+ +---------+ |
| ^ ^ |
| | | |
| v v |
| +-------+ +---------+ |
| | 硬盘 |<------>| 网卡 | |
| +-------+ +---------+ |
+-------------------------------+
PlantUML生成图:
@startuml
package "电脑系统" {
component CPU
component "内存"
component "硬盘"
component "网卡"
CPU <--> "内存"
CPU <--> "硬盘"
"内存" <--> "网卡"
"硬盘" <--> "网卡"
}
@enduml
6. 包图(Package Diagram):
- 显示系统的包结构和包之间的依赖关系
- 帮助管理大型系统的组织结构
ASCII图示:
+----------------+ +----------------+
| UI包 | | 业务逻辑包 |
| |---->| |
+----------------+ +----------------+
| |
| |
v v
+----------------+ +----------------+
| 工具包 | | 数据访问包 |
| |<----| |
+----------------+ +----------------+
PlantUML生成图:
@startuml
package "UI包" as UI
package "业务逻辑包" as BL
package "工具包" as Tools
package "数据访问包" as DA
UI --> BL
UI --> Tools
BL --> DA
DA --> Tools
@enduml
7. 配置图(Profile Diagram,轮廓图):
- 用于定义UML的扩展机制
- 允许开发者定制UML以适应特定领域
ASCII图示:
<<stereotype>>
+----------------+
| 移动设备 |
+----------------+
| +安全级别: int |
+----------------+
PlantUML生成图:
@startuml
skinparam stereotypeCBackgroundColor #ADD8E6
class "移动设备" <<stereotype>> {
+ 安全级别 : int
}
@enduml
行为图(Behavior Diagrams)
行为图主要描述系统的动态行为:
8. 用例图(Use Case Diagram):
- 从用户角度描述系统功能
- 展示系统与外部参与者的交互
ASCII图示:
+-----------------------------+
| ATM系统 |
| |
| +----------+ |
| | | |
| | 取款 |<------+ |
| | | | |
| +----------+ | |
| | |
| +----------+ | |
| | | | |
| | 查询余额 |<------+------ 客户
| | | | |
| +----------+ | |
| | |
| +----------+ | |
| | | | |
| | 存款 |<------+ |
| | | |
| +----------+ |
| |
+-----------------------------+
PlantUML生成图:
@startuml
left to right direction
actor 客户 as customer
rectangle "ATM系统" {
usecase "取款" as withdraw
usecase "查询余额" as checkBalance
usecase "存款" as deposit
}
customer --> withdraw
customer --> checkBalance
customer --> deposit
@enduml
9. 活动图(Activity Diagram):
- 描述业务流程、算法或操作的工作流程
- 类似于流程图,但支持并行行为建模
ASCII图示:
+----------------+
| 开始购物 |
+----------------+
|
v
+----------------+
| 浏览产品 |
+----------------+
|
v
+----------------+
| 选择产品 |
+----------------+
|
v
+----------------+
| 加入购物车 |
+----------------+
|
v
+----------------+
| 是否继续购物? |
+----------------+
/ \
[是] / \ [否]
/ \
| v
| +----------------+
| | 结算 |
| +----------------+
| |
| v
| +----------------+
| | 输入地址 |
| +----------------+
| |
| v
| +----------------+
| | 选择支付 |
| +----------------+
| |
| v
| +----------------+
| | 确认订单 |
| +----------------+
| |
| v
| +----------------+
| | 支付成功 |
| +----------------+
| |
v v
+----------------+ +----------------+
| 继续浏览 | | 结束购物 |
+----------------+ +----------------+
PlantUML生成图:
@startuml
start
:开始购物;
repeat
:浏览产品;
:选择产品;
:加入购物车;
:是否继续购物?;
backward:是;
repeat while (继续购物?)
:结算;
:输入地址;
:选择支付;
:确认订单;
:支付成功;
:结束购物;
stop
@enduml
10. 状态图(State Machine Diagram):
- 描述对象在生命周期内的状态变化
- 展示事件如何触发状态转换
ASCII图示:
+----------+ 注册 +----------+
| 未注册 |-------->| 待激活 |
+----------+ +----------+
|
| 激活
v
+----------+ 冻结 +----------+
| 已冻结 |<--------| 正常 |
+----------+ +----------+
| ^
| |
| 解冻 |
+-------------------->+
PlantUML生成图:
@startuml
[*] --> 未注册
未注册 --> 待激活 : 注册
待激活 --> 正常 : 激活
正常 --> 已冻结 : 冻结
已冻结 --> 正常 : 解冻
@enduml
11. 序列图(Sequence Diagram):
- 展示对象之间的交互顺序
- 强调消息的时间顺序
ASCII图示:
用户 界面 数据库
| | |
|--登录请求-------->| |
| |---验证用户信息---->|
| |<--返回验证结果-----|
|<--显示登录结果----| |
| | |
PlantUML生成图:
@startuml
skinparam sequenceArrowThickness 2
skinparam sequenceParticipant underline
actor 用户
boundary 界面
database 数据库
用户 -> 界面: 登录请求
activate 界面
界面 -> 数据库: 验证用户信息
activate 数据库
数据库 --> 界面: 返回验证结果
deactivate 数据库
界面 --> 用户: 显示登录结果
deactivate 界面
@enduml
12. 通信图(Communication Diagram,协作图):
- 也称为协作图
- 展示对象之间的交互关系
- 强调对象之间的组织结构而非时间顺序
+-------+
| 用户 |
+-------+
|
1:登录请求
|
v
+-------+ +-------+
| 界面 |--2:验证-->| 数据库 |
+-------+ +-------+
|
4:显示结果
|
v
+-------+
| 用户 |
+-------+
PlantUML生成图:
@startuml
' 定义对象
object "用户" as user
object "界面" as ui
object "数据库" as db
' 定义对象间的链接和消息
user --> ui : 1: 登录请求
ui --> db : 2: 验证
db --> ui : 3: 返回结果
ui --> user : 4: 显示结果
@enduml
13. 交互概览图(Interaction Overview Diagram):
- 结合活动图和序列图的特点
- 展示复杂交互的控制流程
ASCII图示:
+----------------+
| 开始登录 |
+----------------+
|
v
+----------------+
| 验证用户名密码 |
+----------------+
|
[验证成功]
/ \
/ \
+----------------+ +----------------+
| sd 查询用户权限 | | sd 记录登录失败 |
+----------------+ +----------------+
\ /
\ /
\ /
+----------------+
| 结束登录 |
+----------------+
PlantUML生成图:
@startuml
:开始登录;
:验证用户名密码;
if (验证成功?) then (yes)
:查询用户权限;
else (no)
:记录登录失败;
endif
:验证结束;
@enduml
14. 时序图(Timing Diagram):
- 展示对象状态随时间变化的情况
- 特别适用于实时系统的建模
和序列图对比:
特性 | 序列图 | 时序图 |
---|---|---|
主要关注点 | 对象间的消息交互 | 对象的状态变化 |
时间轴方向 | 垂直方向(从上到下) | 水平方向(从左到右) |
表达重点 | 交互顺序和逻辑流程 | 状态持续时间和变化时刻 |
适用场景 | 分析对象协作和消息流 | 分析实时系统中状态变化 |
表示方式 | 生命线和消息箭头 | 状态线和状态变化点 |
ASCII图示:
状态
^
闲置 |__________ _________
| | |
忙碌 | |______________|
| | |
+---------------------------------> 时间
收到请求 处理完成
PlantUML生成图:
@startuml
concise "状态 " as Server
@0
Server is 闲置
@5
Server is 忙碌
@15
Server is 闲置
@enduml
应用场景
- 需求分析阶段:用例图、活动图
- 系统设计阶段:类图、对象图、序列图
- 实现阶段:组件图、部署图
- 测试阶段:状态图、时序图
对于不同的建模需求,可以选择使用不同类型的UML图表,它们共同帮助开发团队更好地理解、设计和实现软件系统。