PlantUML 完整教程:从入门到精通

作者:对不起初见日期:2025/10/2

什么是 PlantUML

PlantUML 是一个开源工具,允许用户使用简单直观的文本描述来快速创建 UML 图表。它基于纯文本语法,能够生成多种类型的图表,包括时序图、用例图、类图、活动图、组件图、状态图等。

PlantUML 的核心理念是:用代码画图,让图表版本可控

核心特点

  • 文本驱动:使用简单的文本语法描述图表
  • 版本控制友好:纯文本格式可轻松集成到 Git 等版本控制系统
  • 多格式输出:支持 PNG、SVG、PDF、LaTeX 等多种输出格式
  • 跨平台:基于 Java,可在 Windows、Linux、macOS 上运行
  • 集成性强:可集成到各种编辑器、IDE 和文档系统中

为什么选择 PlantUML

传统画图工具的痛点

    1. 版本控制困难:二进制文件难以追踪变更
    1. 协作不便:多人编辑容易冲突
    1. 维护成本高:图表修改繁琐,容易与代码脱节
    1. 格式不统一:不同工具导致风格不一致

PlantUML 的优势

特性PlantUML传统图形工具
版本控制✅ 完美支持❌ 困难
代码审查✅ 可以 Code Review❌ 不可以
自动布局✅ 智能布局❌ 手动调整
快速修改✅ 修改文本即可❌ 需要拖拽调整
团队协作✅ 易于合并❌ 容易冲突
文档集成✅ 可嵌入 Markdown❌ 需要截图

安装与配置

方法一:在线使用

访问 PlantUML 在线编辑器 即可直接使用,无需安装。

方法二:本地安装

前置要求

PlantUML 基于 Java,需要先安装 Java 运行环境:

1# 检查 Java 版本(需要 Java 8 或更高版本)
2java -version
3

下载 PlantUML

    1. 官方网站 下载 plantuml.jar
    1. 或使用命令下载:
1curl -L -o plantuml.jar https://github.com/plantuml/plantuml/releases/download/v1.2023.13/plantuml-1.2023.13.jar
2

基本使用

1# 生成 PNG 图片
2java -jar plantuml.jar diagram.puml
3
4# 生成 SVG 图片
5java -jar plantuml.jar -tsvg diagram.puml
6
7# 监控文件变化自动生成
8java -jar plantuml.jar -gui
9

方法三:编辑器插件

Visual Studio Code

    1. 安装插件:搜索 “PlantUML”
    1. 安装 Graphviz(用于复杂布局):
1# Windows (使用 Chocolatey)  
2choco install graphviz  
3# macOS  
4brew install graphviz  
5# Ubuntu/Debian  
6sudo apt-get install graphviz  
    1. 预览快捷键:Alt + D

IntelliJ IDEA

    1. 打开 SettingsPlugins
    1. 搜索 “PlantUML integration”
    1. 安装并重启 IDE

Sublime Text

安装 PlantUML 插件即可。


基础语法

通用规则

所有 PlantUML 图表都遵循以下基本结构:

1@startuml
2' 这是注释
3' 图表内容写在这里
4@enduml
5

注释

1@startuml
2' 单行注释使用单引号
3
4/' 
5多行注释
6使用 /' 和 '/
7'/
8
9@enduml
10

样式与主题

1@startuml
2!theme cerulean-outline
3' 其他可用主题:amiga, blueprint, carbon-gray, mars, materia 等
4
5skinparam backgroundColor #EEEBDC
6skinparam handwritten true
7@enduml
8

图表类型详解

时序图

时序图用于展示对象之间的交互顺序,是软件设计中最常用的图表之一。

基础示例

1@startuml
2' 参与者声明
3actor 用户
4participant "前端页面" as Frontend
5participant "后端API" as Backend
6database "数据库" as DB
7
8' 交互流程
9用户 -> Frontend: 输入用户名密码
10Frontend -> Backend: POST /api/login
11Backend -> DB: 查询用户信息
12DB --> Backend: 返回用户数据
13Backend --> Frontend: 返回 JWT Token
14Frontend --> 用户: 登录成功
15@enduml
16

高级特性

1@startuml
2title 用户支付流程
3
4actor 用户
5participant "前端" as F
6participant "订单服务" as O
7participant "支付服务" as P
8participant "第三方支付" as T
9database Redis
10database MySQL
11
12用户 -> F: 点击支付
13activate F
14
15F -> O: 创建订单
16activate O
17O -> MySQL: 保存订单
18O -> Redis: 缓存订单信息
19O --> F: 返回订单号
20deactivate O
21
22F -> P: 发起支付请求
23activate P
24P -> T: 调用支付接口
25activate T
26
27alt 支付成功
28    T --> P: 支付成功回调
29    P -> O: 更新订单状态
30    P --> F: 支付成功
31    F --> 用户: 显示支付成功
32else 支付失败
33    T --> P: 支付失败
34    P --> F: 支付失败
35    F --> 用户: 显示失败原因
36end
37
38deactivate T
39deactivate P
40deactivate F
41@enduml
42

关键语法说明

  • -> :实线箭头
  • --> :虚线箭头(返回)
  • activate / deactivate:激活/停用生命线
  • alt / else / end:条件分支
  • loop / end:循环
  • par / end:并行处理

用例图

用例图描述系统功能和用户的交互关系。

1@startuml
2left to right direction
3skinparam packageStyle rectangle
4
5actor 顾客
6actor 收银员
7actor 管理员
8
9rectangle 电商系统 {
10  顾客 -- (浏览商品)
11  顾客 -- (添加购物车)
12  顾客 -- (下单支付)
13  顾客 -- (查看订单)
14  
15  收银员 -- (处理订单)
16  收银员 -- (处理退款)
17  
18  管理员 -- (管理商品)
19  管理员 -- (查看报表)
20  管理员 -- (管理用户)
21  
22  (下单支付) .> (添加购物车) : <<include>>
23  (处理退款) .> (处理订单) : <<extend>>
24}
25@enduml
26

关键元素

  • actor:参与者
  • (用例名):用例
  • --:关联关系
  • .>:依赖关系(include、extend)

类图

类图是面向对象设计的核心图表,展示类的结构和类之间的关系。

1@startuml
2title 电商系统类图
3
4abstract class User {
5  # id: Long
6  # username: String
7  # email: String
8  # createTime: Date
9  --
10  + login(): boolean
11  + logout(): void
12  # validateEmail(): boolean
13}
14
15class Customer extends User {
16  - address: String
17  - phone: String
18  --
19  + placeOrder(Order): void
20  + viewOrderHistory(): List<Order>
21}
22
23class Admin extends User {
24  - role: String
25  --
26  + manageProducts(): void
27  + viewReports(): void
28}
29
30class Product {
31  - id: Long
32  - name: String
33  - price: BigDecimal
34  - stock: Integer
35  - category: Category
36  --
37  + updateStock(int): void
38  + getDiscountPrice(): BigDecimal
39}
40
41class Order {
42  - orderId: String
43  - customer: Customer
44  - orderDate: Date
45  - status: OrderStatus
46  - totalAmount: BigDecimal
47  --
48  + calculateTotal(): BigDecimal
49  + cancel(): void
50  + pay(): boolean
51}
52
53class OrderItem {
54  - product: Product
55  - quantity: Integer
56  - price: BigDecimal
57  --
58  + getSubTotal(): BigDecimal
59}
60
61enum OrderStatus {
62  PENDING
63  PAID
64  SHIPPED
65  COMPLETED
66  CANCELLED
67}
68
69class Category {
70  - id: Long
71  - name: String
72  - parentCategory: Category
73}
74
75' 关系定义
76Customer "1" -- "*" Order : places >
77Order "1" *-- "*" OrderItem : contains
78OrderItem "*" --> "1" Product : refers to
79Product "*" --> "1" Category : belongs to
80Order --> OrderStatus : has
81
82note right of Order
83  订单创建后24小时内
84  未支付将自动取消
85end note
86
87note top of Product
88  商品价格支持促销折扣
89  库存不足时无法下单
90end note
91
92@enduml
93

关系类型

  • --|>:泛化(继承)
  • ..|>:实现(接口)
  • -->:关联
  • *--:组合
  • o--:聚合
  • ..>:依赖

可见性修饰符

  • -:private
  • #:protected
  • ~:package
  • +:public

活动图

活动图描述业务流程或算法逻辑。

1@startuml
2title 用户注册流程
3
4start
5
6:用户访问注册页面;
7
8:填写注册信息;
9note right
10  包括:
11  * 用户名
12  * 邮箱
13  * 密码
14end note
15
16:提交注册表单;
17
18if (表单验证通过?) then ()
19  :保存用户信息;
20  
21  fork
22    :发送欢迎邮件;
23  fork again
24    :发送短信通知;
25  fork again
26    :记录注册日志;
27  end fork
28  
29  :跳转到登录页面;
30  :显示注册成功提示;
31  
32else ()
33  :显示错误信息;
34  
35  if (重试次数 < 3?) then ()
36    :返回注册页面;
37    :保留已填写信息;
38  else ()
39    :锁定注册;
40    :显示联系客服提示;
41    stop
42  endif
43  
44endif
45
46stop
47
48@enduml
49

常用元素

  • start / stop:开始/结束
  • :活动;:活动节点
  • if/then/else/endif:条件判断
  • while/endwhile:循环
  • fork/fork again/end fork:并行处理
  • partition:泳道分区

带泳道的活动图

1@startuml
2|用户|
3start
4:提交请假申请;
5
6|直属主管|
7:审批申请;
8
9if (是否批准?) then (批准)
10  |HR部门|
11  :记录请假信息;
12  :更新考勤系统;
13  
14  |用户|
15  :收到批准通知;
16  stop
17else (拒绝)
18  |用户|
19  :收到拒绝通知;
20  :查看拒绝原因;
21  stop
22endif
23
24@enduml
25

组件图

组件图展示系统的物理组件及其依赖关系。

1@startuml
2title 微服务架构组件图
3
4package "前端层" {
5  [Web前端] as Web
6  [移动端APP] as Mobile
7}
8
9package "网关层" {
10  [API Gateway] as Gateway
11}
12
13package "服务层" {
14  [用户服务] as UserService
15  [订单服务] as OrderService
16  [商品服务] as ProductService
17  [支付服务] as PaymentService
18}
19
20package "基础设施层" {
21  [认证中心] as Auth
22  [配置中心] as Config
23  [服务注册中心] as Registry
24}
25
26database "MySQL集群" {
27  [用户数据库]
28  [订单数据库]
29  [商品数据库]
30}
31
32cloud "第三方服务" {
33  [微信支付]
34  [阿里云OSS]
35}
36
37Web --> Gateway
38Mobile --> Gateway
39
40Gateway --> UserService
41Gateway --> OrderService
42Gateway --> ProductService
43
44OrderService --> PaymentService
45PaymentService --> [微信支付]
46
47UserService --> Auth
48OrderService --> Auth
49
50UserService --> Registry
51OrderService --> Registry
52ProductService --> Registry
53PaymentService --> Registry
54
55UserService --> [用户数据库]
56OrderService --> [订单数据库]
57ProductService --> [商品数据库]
58
59@enduml
60

状态图

状态图描述对象的生命周期和状态转换。

1@startuml
2title 订单状态流转图
3
4[*] --> 待支付 : 创建订单
5
6待支付 --> 已支付 : 支付成功
7待支付 --> 已取消 : 超时/手动取消
8待支付 --> 已取消 : 库存不足
9
10已支付 --> 待发货 : 进入发货队列
11已支付 --> 退款中 : 申请退款
12
13待发货 --> 已发货 : 发货
14待发货 --> 退款中 : 申请退款
15
16已发货 --> 已签收 : 确认收货
17已发货 --> 退款中 : 申请退货
18
19已签收 --> 已完成 : 系统自动确认
20已签收 --> 售后中 : 申请售后
21
22售后中 --> 已完成 : 售后完成
23
24退款中 --> 已退款 : 退款成功
25退款中 --> 已支付 : 退款失败
26
27已取消 --> [*]
28已完成 --> [*]
29已退款 --> [*]
30
31待支付 : entry / 发送支付通知
32待支付 : exit / 释放库存锁定
33
34已发货 : do / 物流跟踪
35已发货 : 预计3-5天送达
36
37@enduml
38

状态语法

  • entry /:进入状态时执行
  • exit /:离开状态时执行
  • do /:在状态中持续执行

对象图

对象图展示特定时刻对象实例及其关系。

1@startuml
2title 订单对象实例图
3
4object 订单001 {
5  订单号 = "ORD20231015001"
6  订单日期 = "2023-10-15"
7  状态 = "已支付"
8  总金额 = 1299.00
9}
10
11object 客户张三 {
12  客户ID = "CUST001"
13  姓名 = "张三"
14  会员等级 = "金卡"
15}
16
17object 商品iPhone {
18  商品ID = "PROD001"
19  商品名称 = "iPhone 15"
20  价格 = 5999.00
21}
22
23object 商品保护壳 {
24  商品ID = "PROD002"
25  商品名称 = "iPhone保护壳"
26  价格 = 99.00
27}
28
29object 订单明细1 {
30  数量 = 1
31  单价 = 5999.00
32}
33
34object 订单明细2 {
35  数量 = 2
36  单价 = 99.00
37}
38
39客户张三 -- 订单001
40订单001 *-- 订单明细1
41订单001 *-- 订单明细2
42订单明细1 --> 商品iPhone
43订单明细2 --> 商品保护壳
44
45@enduml
46

部署图

部署图展示系统的物理部署架构。

1@startuml
2title 生产环境部署图
3
4node "负载均衡器" as LB {
5  [Nginx] as nginx
6}
7
8node "应用服务器集群" {
9  node "服务器1" as APP1 {
10    [应用实例1] as app1
11  }
12  
13  node "服务器2" as APP2 {
14    [应用实例2] as app2
15  }
16  
17  node "服务器3" as APP3 {
18    [应用实例3] as app3
19  }
20}
21
22node "数据库服务器" as DBMS {
23  database "MySQL主库" as DBMaster
24  database "MySQL从库1" as DBSlave1
25  database "MySQL从库2" as DBSlave2
26}
27
28node "缓存服务器" as CacheServer {
29  database "Redis集群" as redis
30}
31
32node "文件存储" as Storage {
33  [MinIO] as minio
34}
35
36cloud "CDN" as cdn
37
38nginx --> app1
39nginx --> app2
40nginx --> app3
41
42app1 --> DBMaster
43app2 --> DBMaster
44app3 --> DBMaster
45
46app1 --> DBSlave1
47app2 --> DBSlave2
48
49app1 --> redis
50app2 --> redis
51app3 --> redis
52
53app1 --> minio
54app2 --> minio
55app3 --> minio
56
57DBMaster -down-> DBSlave1 : 主从复制
58DBMaster -down-> DBSlave2 : 主从复制
59
60minio -up-> cdn : 静态资源分发
61
62@enduml
63

时间图

时间图展示对象状态随时间的变化。

1@startuml
2robust "Web服务器" as WEB
3robust "应用服务器" as APP
4robust "数据库服务器" as DB
5
6@0
7WEB is 空闲
8APP is 空闲
9DB is 空闲
10
11@100
12WEB is 处理请求
13@200
14APP is 查询数据
15@300
16DB is 执行SQL
17@400
18DB is 返回结果
19@500
20APP is 处理数据
21@600
22WEB is 返回响应
23@700
24WEB is 空闲
25APP is 空闲
26DB is 空闲
27
28@enduml
29

甘特图

甘特图用于项目进度管理。

1@startgantt
2title 项目开发计划
3
4Project starts 2023-10-01
5
6[需求分析] lasts 5 days
7[UI设计] lasts 7 days
8[原型制作] lasts 5 days
9
10[需求分析] -> [UI设计]
11[UI设计] -> [原型制作]
12
13[前端开发] lasts 15 days
14[后端开发] lasts 20 days
15[数据库设计] lasts 5 days
16
17[原型制作] -> [前端开发]
18[需求分析] -> [后端开发]
19[需求分析] -> [数据库设计]
20[数据库设计] -> [后端开发]
21
22[前端测试] lasts 5 days
23[后端测试] lasts 5 days
24[前端开发] -> [前端测试]
25[后端开发] -> [后端测试]
26
27[集成测试] lasts 7 days
28[前端测试] -> [集成测试]
29[后端测试] -> [集成测试]
30
31[上线部署] lasts 2 days
32[集成测试] -> [上线部署]
33
34[需求分析] is colored in Fuchsia/FireBrick
35[UI设计] is colored in GreenYellow/Green
36[前端开发] is colored in Cyan/Blue
37[后端开发] is colored in Cyan/Blue
38
39@endgantt
40

思维导图

PlantUML 也支持思维导图(Mind Map)。

1@startmindmap
2title 学习 PlantUML
3
4* PlantUML
5** 基础知识
6*** 安装配置
7*** 基本语法
8*** 编辑器集成
9** 图表类型
10*** 结构图
11**** 类图
12**** 组件图
13**** 部署图
14**** 对象图
15*** 行为图
16**** 用例图
17**** 时序图
18**** 活动图
19**** 状态图
20*** 其他
21**** 甘特图
22**** 思维导图
23**** 架构图
24** 高级特性
25*** 样式定制
26*** 主题应用
27*** 宏定义
28*** 包含文件
29** 实践应用
30*** 技术文档
31*** 项目设计
32*** 代码注释
33*** 团队协作
34
35@endmindmap
36

高级特性

1. 样式定制

1@startuml
2skinparam class {
3  BackgroundColor PaleGreen
4  ArrowColor SeaGreen
5  BorderColor SpringGreen
6  FontName Arial
7  FontSize 14
8}
9
10skinparam stereotypeCBackgroundColor YellowGreen
11
12class Example {
13  + field: String
14  + method(): void
15}
16@enduml
17

2. 使用变量和宏

1@startuml
2!define ENTITY(name) class name << (E,#FFAAAA) >>
3!define SERVICE(name) class name << (S,#AAFFAA) >>
4
5ENTITY(User)
6ENTITY(Order)
7SERVICE(UserService)
8SERVICE(OrderService)
9
10User --> UserService
11Order --> OrderService
12@enduml
13

3. 包含外部文件

1@startuml
2!include common-styles.puml
3!include entities.puml
4
5' 使用已定义的样式和类
6@enduml
7

4. 使用标准库

1@startuml
2!include <aws/common>
3!include <aws/Storage/AmazonS3/AmazonS3>
4!include <aws/Compute/AmazonEC2/AmazonEC2>
5
6AmazonEC2(ec2, "应用服务器", "")
7AmazonS3(s3, "文件存储", "")
8
9ec2 --> s3
10@enduml
11

5. 预处理功能

1@startuml
2!$company = "我的公司"
3!$debug = %true()
4
5!if $debug
6  title $company + " - 开发环境"
7!else
8  title $company + " - 生产环境"
9!endif
10
11@enduml
12

6. 图表布局控制

1@startuml
2' 从左到右布局
3left to right direction
4
5' 隐藏某些元素
6hide empty members
7hide circle
8
9' 页面设置
10scale 1.5
11skinparam dpi 300
12
13@enduml
14

实际应用场景

1. 技术文档编写

在 Markdown 文档中嵌入 PlantUML:

1# 系统架构设计
2
3## 时序图
4
5```plantuml
6@startuml
7Alice -> Bob: 你好
8Bob --> Alice: 你好
9@enduml

### 2\. 代码注释

在代码中使用 PlantUML 描述逻辑:

```markdown
/**
 * 用户登录流程
 * 
 * @startuml
 * actor User
 * User -> LoginController: login(username, password)
 * LoginController -> UserService: authenticate()
 * UserService -> Database: queryUser()
 * Database --> UserService: User
 * UserService --> LoginController: Token
 * LoginController --> User: Success
 * @enduml
 */
public void login(String username, String password) {
    // 实现代码
}

3. Git 版本控制

1# 将 .puml 文件加入版本控制
2git add docs/diagrams/*.puml
3
4# 在 Pull Request 中可以看到图表的文本差异
5git diff docs/diagrams/architecture.puml
6

4. CI/CD 集成

在 GitLab CI 或 GitHub Actions 中自动生成图表:

1# .github/workflows/generate-diagrams.yml
2name: Generate PlantUML Diagrams
3
4on: [push]
5
6jobs:
7  build:
8    runs-on: ubuntu-latest
9    steps:
10      - uses: actions/checkout@v2
11      - name: Generate PlantUML
12        uses: grassedge/generate-plantuml-[email protected]
13        with:
14          path: docs/diagrams
15          message: "Auto-generated diagrams"
16      - name: Commit changes
17        run: |
18          git config user.name github-actions
19          git config user.email [email protected]
20          git add .
21          git commit -m "Update diagrams" || exit 0
22          git push
23

5. Wiki 和 Confluence 集成

许多 Wiki 系统支持 PlantUML 插件,可以直接渲染图表。


最佳实践

1. 文件组织

1project/
2├── docs/
3│   ├── diagrams/
4│   │   ├── architecture/
5│   │   │   ├── overview.puml
6│   │   │   └── components.puml
7│   │   ├── sequence/
8│   │   │   ├── login-flow.puml
9│   │   │   └── payment-flow.puml
10│   │   └── class/
11│   │       ├── domain-model.puml
12│   │       └── service-layer.puml
13│   └── README.md
14└── styles/
15    └── common.puml
16

2. 命名规范

  • 文件名:使用小写字母,单词用连字符分隔
    • user-login-sequence.puml
    • order-service-class-diagram.puml
  • 图表标题:清晰描述图表内容
title 用户登录时序图 - v1.2  
  • 元素命名:使用有意义的名称
1class UserService  
2participant "订单服务" as OrderService  

3. 注释和文档

1@startuml
2title 订单处理流程
3
4' ========================================
5' 作者:张三
6' 日期:2023-10-15
7' 版本:1.0
8' 描述:展示从下单到支付的完整流程
9' ========================================
10
11note right of Order
12  订单创建后需要在30分钟内完成支付
13  否则将自动取消并释放库存
14end note
15
16@enduml
17

4. 保持简洁

  • • 避免在一个图表中包含过多信息
  • • 复杂系统应拆分为多个图表
  • • 每个图表聚焦一个核心主题

5. 使用样式一致性

创建共享样式文件:

1' common-styles.puml
2@startuml
3skinparam backgroundColor #FFFFFF
4skinparam classBackgroundColor #E8F5E9
5skinparam classBorderColor #4CAF50
6skinparam classFontSize 12
7skinparam classFontName Microsoft YaHei
8
9skinparam sequenceArrowColor #2196F3
10skinparam sequenceLifeLineBorderColor #1976D2
11
12skinparam activityStartColor #4CAF50
13skinparam activityEndColor #F44336
14skinparam activityBackgroundColor #FFF9C4
15skinparam activityBorderColor #FBC02D
16
17@enduml
18

在其他文件中引用:

1@startuml
2!include ../styles/common-styles.puml
3
4' 你的图表内容
5@enduml
6

6. 版本管理

在图表中记录版本信息:

1@startuml
2header
3  版本: 2.1
4  修改日期: 2023-10-15
5  修改人: 李四
6end header
7
8footer Page %page% of %lastpage%
9
10@enduml
11

7. 自动化生成

创建脚本批量生成图片:

1#!/bin/bash
2# generate-all.sh
3
4PUML_DIR="./diagrams"
5OUTPUT_DIR="./output"
6
7mkdir -p $OUTPUT_DIR
8
9for file in $PUML_DIR/**/*.puml; do
10  echo "Processing $file..."
11  java -jar plantuml.jar -o $OUTPUT_DIR -tsvg $file
12done
13
14echo "All diagrams generated!"
15

常见问题与解决方案

1. 中文显示问题

如果中文显示为方框,需要配置字体:

1@startuml
2skinparam defaultFontName Microsoft YaHei
3' 或者
4skinparam defaultFontName SimHei
5@enduml
6

2. 图表太大

1@startuml
2scale 0.8
3' 或者
4scale 800 width
5' 或者
6scale 600 height
7@enduml
8

3. 箭头方向控制

1@startuml
2' 强制从左到右
3A -right-> B
4
5' 强制从上到下
6C -down-> D
7
8' 强制从右到左
9E -left-> F
10
11' 强制从下到上
12G -up-> H
13@enduml
14

4. 隐藏不必要的元素

1@startuml
2hide empty members
3hide circle
4hide stereotype
5@enduml
6

总结

PlantUML 是一个强大且灵活的工具,特别适合:

版本控制:纯文本格式,完美集成 Git
快速迭代:修改文本即可,无需拖拽
团队协作:易于代码审查和合并
文档同步:图表与代码放在一起,不易脱节
自动化:可集成到 CI/CD 流程

虽然 PlantUML 需要学习一定的语法,但其带来的效率提升和版本控制便利性远超传统的图形化工具。对于需要频繁更新和维护技术文档的团队来说,PlantUML 是一个理想的选择。


参考资源


附录:常用命令速查表

图表类型开始标记结束标记
时序图@startuml@enduml
用例图@startuml@enduml
类图@startuml@enduml
活动图@startuml@enduml
状态图@startuml@enduml
甘特图@startgantt@endgantt
思维导图@startmindmap@endmindmap

箭头类型

符号说明
->实线箭头
-->虚线箭头
->>实线双箭头
-->>虚线双箭头
-半箭头

关系类型(类图)

符号关系
`<–`
`<…`
*--组合
o--聚合
-->关联
..>依赖


PlantUML 完整教程:从入门到精通》 是转载文章,点击查看原文


相关推荐


第6篇、Flask 表单处理与用户认证完全指南:从零到实战
何双新2025/10/2

标签:Python Flask Web开发 表单验证 Session Cookie 用户认证 安全编程 🎯 为什么选择这篇文章? 在Web开发的世界里,表单处理和用户认证是每个开发者必须掌握的核心技能。无论是构建电商网站、社交平台还是企业管理系统,都离不开用户登录、数据提交、状态保持这些基础功能。 Flask作为Python最轻量级的Web框架,以其简洁优雅的设计理念,让开发者能够快速构建功能完整的Web应用。本文将带你从零开始,深入理解Flask的表单处理机制,掌握Session和


微服务架构:从单机到分布式的革命性升级
chengooooooo10/2/2025

本文探讨了传统单机服务的缺陷及微服务架构的解决方案。单机模式存在单点故障、扩展性差、强耦合、技术栈受限等问题。微服务通过将系统拆分为独立服务,实现解耦、独立部署、技术多样性,并提供了分布式架构下的解决方案。SpringCloud提供了服务熔断、限流、服务注册与发现、配置中心、API网关等核心组件,同时介绍了分布式追踪、消息队列和分布式事务的实现方式。相比单机部署,微服务利用云计算实现动态资源分配和自动化管理,提高了系统的可用性和扩展性。


Excel文件瘦身指南:快速瘦身,告别卡顿-Excel易用宝
Excel_easy10/1/2025

明明工作簿文件中没有几行数据,打开表格的时候要等好一会儿,写个VLOOKUP函数公式鼠标指针都要转半天。其实这是由于文件中积累着各种冗余的信息导致的表格体积变大,计算卡顿等现象。单击【易用宝】→【工作簿】→【Excel文件瘦身】。表格文件超大,打开卡顿,闪烁,这种慢慢慢,烦人!我们只需给表格文件瘦个身就ok了。你有没有遇到过这种情况呢?


AI大模型学习(14)AI 小白入门!用 OpenCV+Python 打造人体姿态识别系统,超详细教程来了
icoder8889/30/2025

这篇教程介绍了如何使用Python+OpenCV+MediaPipe搭建入门级人体姿态识别系统。主要内容包括:人体姿态识别的应用场景(如健身APP、体感游戏)、开发环境搭建(安装Python、OpenCV和MediaPipe库)、核心代码实现(通过30行代码完成摄像头姿态检测),以及进阶功能开发(深蹲动作纠正算法和PPT体感控制器)。教程详细解析了MediaPipe的BlazePose模型架构和33个关键点的生理学意义,并提供了多线程优化等性能提升方案。该项目适合AI初学者实践,无需复杂算法即可实现实时人体


【深入浅出PyTorch】--3.1.PyTorch组成模块1
西柚小萌新吖(●ˇ∀ˇ●)2025/10/3

通过本节学习,你将掌握: 机器学习/深度学习任务的整体流程。各个阶段在任务中的作用与实现方式。深度学习与传统机器学习在实现上的关键差异。PyTorch 如何支持深度学习任务的模块化实现。 二、机器学习任务的标准流程 步骤内容说明1. 数据预处理- 统一数据格式 - 清除异常值 - 进行必要的数据变换(如归一化、标准化) - 划分数据集:训练集、验证集、测试集 - 常见方法:按比例随机划分、KFold 交叉验证 - 工具支持:sklearn.model_selection.train_t


【Matlab】matlab代码实现最小凸包
智慧浩海2025/10/4

实现最小凸包的算法有多种方法,其中一种常见的方法是使用Graham扫描算法。下面是用Matlab实现Graham扫描算法找到最小凸包的示例代码: function [convexHull] = grahamScan(points) % 找到包含所有点的最小凸包 n = length(points); % 找到y坐标最小的点作为起始点 [~,idx] = min(points(:,2)); startPoint = points(idx,:);


在AI技术快速实现创意的时代,挖掘游戏开发框架新需求成为关键
qife1222025/10/6

内容描述 核心功能定位:该项目是一个专为经典游戏主机设计的增强型JavaScript运行环境,旨在为用户提供完整的自制软件开发工具包。它通过简化开发流程,让开发者能够使用JavaScript这一简单语言创建游戏和应用程序,无需编译过程,只需编写脚本即可快速测试。 关键应用场景:主要应用于经典游戏主机的自制软件开发,包括游戏创作、应用程序开发、图形渲染、音频处理、网络通信等多个领域。开发者可以利用该环境快速原型设计和开发各类交互式内容。 功能特性 多模块支持:系统提供丰富的功能模块,


【前端工程化】脚手架篇 - 模板引擎 & 动态依赖管理脚手架
ObjectX不知名程序员2025/10/7

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣 在日常工作中,我们经常为会遇到需要创建新项目的需求,为了统计代码风格,项目配置,提升效率,我们可以创建一个cli工具,帮助我们实现这样的功能。你也可以搭建一个自己用,毕竟省下来的时间都是自己的 🥑 你能学到什么? 希望在你阅读本篇文章之后,不会觉得浪费了时间。如果你跟着读下来,你将会学到: cli工具的基本搭建流程 如何通过模板引擎实现可选依赖 模板系统如何设计 如何根据模板引擎生成所需项目 熟悉一个组件库的基本结构 熟悉一


OSI 七层模型
日更嵌入式的打工靓仔2025/10/9

一、OSI 七层模型的核心定位与价值​ OSI 七层模型(Open Systems Interconnection Reference Model)是国际标准化组织(ISO)于 1984 年制定的网络通信体系结构标准,其核心目标是打破不同厂商设备的通信壁垒,通过分层化设计实现 “功能解耦、接口标准化”。该模型将网络通信的复杂流程拆解为七个逻辑层次,每层通过定义明确的 “服务原语”(Service Primitive)为上层提供服务,并通过 “协议数据单元(PDU)” 与下层交互,确保不同系统间


【Node】认识一下Node.js 中的 VM 模块
你的人类朋友2025/10/10

前言 今天介绍 Node.js 中的 VM(Virtual Machine)模块的基本概念和使用方法。 很多人不太了解他,比如在下 所以本文也不会过于深入,会偏向入门! 小目标:看完之后向自己解释一下:啥是 VM 模块?它有什么作用? 什么是 VM 模块 VM 模块是 Node.js 内置的模块,用于在 V8 虚拟机上下文中编译和执行 JavaScript 代码。 说人话就是,VM 模块允许你在隔离的环境中运行 JavaScript 代码。 核心功能 这边用代码进行举例子,后面会介绍具体的使用

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0