UML 建模
约 551 字大约 2 分钟
UML设计建模
2024-08-13
概述
UML (Unified Modeling Language) 是一种用于软件系统建模的标准语言。
UML 图分类
| 类型 | 图 |
|---|---|
| 结构图 | 类图、对象图、包图、组件图、部署图 |
| 行为图 | 用例图、活动图、状态图 |
| 交互图 | 顺序图、通信图、时序图 |
用例图 (Use Case Diagram)
概念
描述系统功能需求,展示用户与系统的交互。
符号
┌─────────────────┐ ┌─────────────────┐
│ Actor │ │ <<system>> │
│ ┌─────┐ │ │ │
│ │ │ │ │ ┌───────────┐ │
│ │ 🧑 │ │─────────▶│ │ Use Case │ │
│ │ │ │ │ └───────────┘ │
│ └─────┘ │ │ │
└─────────────────┘ └─────────────────┘
Actor: 参与者 (人、系统、外部实体)
Use Case: 用例 (系统功能)关系
| 关系 | 符号 | 说明 |
|---|---|---|
| 关联 | ──── | Actor 与 Use Case 交互 |
| 包含 | ──▶ │ <<include>> 必选功能 | |
| 扩展 | ──▶ │ <<extend>> 可选功能 | |
| 泛化 | ──▶ │ 继承关系 |
示例
┌──────────────────────────────┐
│ 网上购物系统 │
│ │
┌─────┐ │ ┌────────────┐ │
│顾客 │──│──│ 登录系统 │ │
└─────┘ │ └────────────┘ │
│ │ │
┌─────┐ │ ┌────────────┐ │
│管理员│──│──│ 管理商品 │◀──┐ │
└─────┘ │ └────────────┘ │ │
│ │ │ │
│ ┌────────────┐ │ │
│ │ 下订单 │◀──│─ ─ - - -│─ ─ ─▶ ┌─────┐
│ └────────────┘ │ │ │支付 │
│ │ │ │ │系统 │
│ ┌────────────┐ │ │ └─────┘
│ │ 支付订单 │◀──┘ │
│ └────────────┘ <<extend>> │
│ │
└──────────────────────────────┘类图 (Class Diagram)
基本结构
┌─────────────────────────┐
│ 类名 │
├─────────────────────────┤
│ - 属性 : 类型 │
│ - 字段 │
├─────────────────────────┤
│ + 方法() : 返回类型 │
│ + 行为 │
└─────────────────────────┘
- : private
+ : public
# : protected
~ : package关系
| 关系 | 符号 | 说明 |
|---|---|---|
| 依赖 | ──▶ | A 使用 B |
| 关联 | ──── | A 持有 B 引用 |
| 聚合 | ──◇ | "has-a",部分可独立 |
| 组合 | ──◆ | "contains-a",部分不可独立 |
| 泛化 | ──▷ | 继承 |
| 实现 | ──▷ | 实现接口 |
示例
┌────────────┐ ┌────────────┐
│ Person │ │ Address │
├────────────┤ ├────────────┤
│-name: String│ │-city: String│
│-age: int │ └──────┬─────┘
└──────┬─────┘ │
│ │
◇ │ 1 1 │
│ │
▼ │
┌────────────┐ │
│ Customer │─────────────────┘
├────────────┤ lives at (关联)
│-id: String │
└────────────┘
┌────────────┐ △
│ <<interface>>│─────┘
│ Printable │
├────────────┤
│+ print() │
└──────┬─────┘
│ implements
┌──────┴─────┐
│ Document │
├────────────┤
│+ title │
│+ content │
├────────────┤
│+ print() │
└────────────┘时序图 (Sequence Diagram)
符号
┌────────┐ ┌────────┐ ┌────────┐
│ Client │ │ Server │ │ DB │
└───┬────┘ └───┬────┘ └───┬────┘
│ │ │
│ 1.请求 │ │
│─────────────▶ │
│ │ │
│ 2.查询 │ │
│─────────────▶ │
│ │ │
│ 3.返回结果 │ │
│◀─────────────│ │
│ │ │
│ 4.处理完成 │ │
│◀─────────────│ │示例
┌────────────┐ ┌────────────┐ ┌────────────┐
│ 浏览器 │ │ 服务器 │ │ 数据库 │
└─────┬──────┘ └─────┬──────┘ └─────┬──────┘
│ │ │
│ 1. GET /users │ │
│────────────────▶│ │
│ │ │
│ │ 2. SELECT * │
│ │────────────────▶
│ │ │
│ │ 3. 返回结果 │
│ │◀────────────────│
│ │ │
│ 4. JSON响应 │ │
│◀────────────────│ │
│ │ │
│ 5. 渲染页面 │ │
│ │ │活动图 (Activity Diagram)
符号
┌─────────┐
│ 开始 │
└────┬────┘
│
▼
┌─────────────┐
│ 活动1 │
└─────┬───────┘
│
▼
┌───┴───┐
│ 条件 │ [条件1]
└───┬───┘
│
┌────┴────┐
│ │
▼ ▼
┌──────┐ ┌──────┐
│活动2 │ │活动3 │
└──┬───┘ └──┬───┘
│ │
└────┬────┘
▼
┌─────────────┐
│ 结束 │
└─────────────┘状态图 (State Diagram)
符号
┌──────────────────┐
│ 状态1 │
└────────┬─────────┘
│
▼ events / actions
┌──────────────────┐
│ 状态2 │
│──────────────────│
│ entry / entry │
│ do / 活动中 │
│ exit / 退出 │
└────────┬─────────┘
│
▼
────────────
╱ ╲
╱ 结束状态 ╲
╲ ╱
────────────组件图 (Component Diagram)
示例
┌──────────────────────┐
│ <<component>> │
│ ┌──────────┐ │
│ │ Order │ │
│ │ Component│◀───────────│<<interface>> IOrder
│ └──────────┘ │
└──────────┬───────────┘
│ provides
│ uses
┌──────────▼───────────┐
│ <<component>> │
│ ┌──────────┐ │
│ │ Payment │ │
│ │ Component│ │
│ └──────────┘ │
└──────────────────────┘部署图 (Deployment Diagram)
示例
┌─────────────────┐
│ <<device>> │
│ Web Browser │
└────────┬────────┘
│ TCP/IP
┌────────▼────────┐
│ <<device>> │
│ Web Server │
│ ┌───────────┐ │
│ │ Component │ │
│ │ nginx │ │
│ └───────────┘ │
└────────┬────────┘
│ HTTP
┌────────▼────────┐
│ <<device>> │
│ App Server │
│ ┌───────────┐ │
│ │Component │ │
│ │ Node.js │ │
│ └───────────┘ │
└────────┬────────┘
│
┌────────▼────────┐
│ <<device>> │
│ Database │
│ PostgreSQL │
└────────────────┘工具推荐
| 工具 | 类型 | 说明 |
|---|---|---|
| draw.io | 在线 | 免费、跨平台 |
| PlantUML | 代码 | 文本描述图表 |
| StarUML | 桌面 | 专业建模工具 |
| Mermaid | 代码 | Markdown 内嵌图表 |
Mermaid 示例
graph TD
A[开始] --> B{条件判断}
B -->|是| C[活动1]
B -->|否| D[活动2]
C --> E[结束]
D --> E