UML 统一建模语言入门介绍
UML(Unified Modeling Language)是一套由 OMG 标准化的通用可视化建模语言,用于规约、构造和文档化软件系统的结构与行为。当前最新正式版本为 UML 2.5.1(2017),共包含 14 种图。
2. UML 历史
2.1 起源:三剑客汇合(1994-1995)
| 人物 | 方法 | 特点 |
|---|---|---|
| Grady Booch | Booch 方法 | 强调类与对象,面向设计 |
| James Rumbaugh | OMT(对象建模技术) | 强调分析与数据建模 |
| Ivar Jacobson | OOSE(面向对象软件工程) | 强调用例驱动 |
- 1994 年 Rumbaugh 加入 Rational 公司,与 Booch 合作统一方法。
- 1995 年 Jacobson 加入,三人合称 "三友"(Three Amigos)。
2.2 标准化之路(1996-1997)
- 三人融合各自方法,发布 UML 0.9 / 0.91。
- 1996 年 Rational 牵头成立 UML 联盟,DEC、HP、IBM、Microsoft、Oracle 等加入。
- 1997 年 1 月提交 UML 1.0 给 OMG(对象管理组织)。
- 1997 年 11 月 OMG 采纳 UML 1.1 作为首个正式标准。
2.3 UML 1.x 迭代(1998-2003)
| 版本 | 年份 | 关键变化 |
|---|---|---|
| UML 1.1 | 1997 | 首个 OMG 正式标准 |
| UML 1.2 | 1998 | 细节修正 |
| UML 1.3 | 1999 | 引入扩展机制(stereotype / tagged value) |
| UML 1.4 | 2001 | 加入 action semantics |
| UML 1.5 | 2003 | 完善 action 语义模型 |
2.4 UML 2.0:重大变革(2005)
- 序列图、活动图大幅增强。
- 组件图重新定义。
- 支持 MDA(模型驱动架构)。
- 正式引入 OCL 2.0(对象约束语言)。
- 规范分裂为 Infrastructure(基础架构)和 Superstructure(上层结构)两部分。
2.5 后续演进与统一
| 版本 | 年份 | 关键变化 |
|---|---|---|
| UML 2.1.x | 2007 | 修正与微调 |
| UML 2.2 | 2009 | 结构重新组织 |
| UML 2.3 | 2010 | 细化改进 |
| UML 2.4.1 | 2011 | Bug 修复 |
| UML 2.5 | 2015 | Infrastructure 与 Superstructure 合并回单一规范,简化建模 |
| UML 2.5.1 | 2017 | 当前最新正式版 |
2.6 官方文档
- OMG 官方规范页面:omg.org/spec/UML
- UML 2.5.1 PDF:omg.org/spec/UML/2.5.1/PDF
3. 14 种图分类
UML 2.5.1 的 14 种图分为结构图(描述系统静态结构)和行为图(描述系统动态行为)两大类:
4. 结构图(Structure Diagrams)
结构图不考虑时间维度,描述系统在某一时刻的静态构成。
4.1 类图(Class Diagram)— 最核心的结构图
描述系统中的类、接口、协作及其关系(继承、关联、聚合、组合、依赖)。是面向对象建模的基石。
4.2 对象图(Object Diagram)
类图的实例化快照——展示某一时刻对象间的连接关系。用于举例说明类图。
4.3 包图(Package Diagram)
将模型元素按包组织,展示包之间的依赖和包含关系。用于宏观架构分层。
4.4 组件图(Component Diagram)
展示软件组件之间的组织和依赖,强调接口的提供与消费。适合描述微服务拓扑。
4.5 复合结构图(Composite Structure Diagram)
描述类或组件的内部结构(Parts),以及各部件之间的协作连接。侧重内部协作关系。
4.6 部署图(Deployment Diagram)
展示软件制品(artifact)部署到硬件节点(node)上的物理拓扑。运维和架构师常用。
4.7 剖面图(Profile Diagram)
UML 的扩展机制——通过 stereotype、tagged value、constraint 定义领域特定建模扩展。
5. 行为图(Behavior Diagrams)
行为图描述系统随时间变化的动态行为。
5.1 用例图(Use Case Diagram)
从用户视角描述系统提供的功能(用例)及参与者与系统之间的交互。需求阶段首选工具。
5.2 活动图(Activity Diagram)
流程图的高级形式,支持分支、并发、泳道。适合描述业务流程和算法步骤。
5.3 状态机图(State Machine Diagram)
描述对象在其生命周期中经历的状态序列及触发状态转移的事件。适合订单、工单等有明确状态的对象。
5.4 序列图(Sequence Diagram)
按时间顺序展示对象间的消息交互。UML 中最常用的行为图,适合描述 API 调用链、微服务交互。
5.5 通信图(Communication Diagram)
与序列图语义等价,但强调对象间的拓扑连接关系而非时间顺序。是序列图的"空间视图"。
5.6 交互概览图(Interaction Overview Diagram)
活动图与序列图的混合体——用活动图节点嵌入子序列图。适合宏观业务流程串联。
5.7 时间图(Timing Diagram)
展示对象状态随时间的变化曲线,带有精确的时间刻度。适合实时系统、协议时序分析。
6. 工具生态
| 工具 | 类型 | 特点 |
|---|---|---|
| PlantUML | 文本驱动 | 代码即图,Git 友好,免费开源 |
| Enterprise Architect | 重量级 IDE | 完整 UML + SysML + BPMN,工业级 |
| StarUML | 桌面工具 | 轻量美观,多平台 |
| draw.io | 在线/离线 | 快速绘制,免费 |
| Visual Paradigm | 全功能 | 支持从建模到代码生成 |
7. 与其他建模语言对比
7.1 OMG 系(UML 近亲)
| 语言 | 定位 | 特点 |
|---|---|---|
| SysML | 系统工程建模 | UML 的扩展子集,适合硬件、软件、流程混合系统 |
| SysML v2 | 下一代系统工程 | 文本+图形双表示,更强语义,正在替代 SysML v1 |
| BPMN | 业务流程建模 | 专注业务流程图,支持可执行流程 |
| SoaML | 面向服务架构 | 服务识别、规约与编排建模 |
| UPDM / UAF | 军事/企业架构 | 覆盖作战能力、人员、资源等超宽维度 |
7.2 形式化方法系
| 语言 | 定位 | 特点 |
|---|---|---|
| TLA+ / PlusCal | 分布式系统验证 | Leslie Lamport 设计,Amazon/MongoDB 用于核心算法验证,可数学证明系统正确性 |
| Alloy | 轻量形式化规约 | MIT 出品,基于关系逻辑,适合结构约束检查 |
| Z notation | 形式化规约 | 基于集合论与谓词逻辑,工业级形式化 |
| Event-B / Rodin | 逐步精化建模 | 从抽象到具体逐层精化系统 |
| Coq / Isabelle | 定理证明 | 辅助证明框架,编译器验证等场景 |
7.3 架构描述语言(ADLs)
| 语言 | 定位 | 特点 |
|---|---|---|
| AADL | 嵌入式实时系统 | 装配/飞机/汽车,直接对接时序、容错、硬件绑定分析 |
| C4 Model | 轻量架构可视化 | Context → Container → Component → Code 四层分层 |
| ArchiMate | 企业架构建模 | 与 TOGAF 配套,业务/应用/技术三层 |
| 4+1 View Model | 架构视图 | Kruchten 提出:逻辑/开发/进程/物理 + 场景 |
7.4 领域特定建模语言
| 语言 | 领域 | 特点 |
|---|---|---|
| Petri Nets | 并发/离散事件 | 数学建模工具,Petri 网分析有界性/活性等 |
| Statecharts | 状态与行为 | David Harel 提出,UML 状态机图的原型 |
| ER 图 / IDEF1X | 数据建模 | 数据库设计的核心呈现方式 |
| Simulink / Modelica | 物理系统仿真 | 控制工程、多物理域建模 |
8. UML 的定位
8.1 不可替代性
- 覆盖面最广:14 种图,囊括结构、行为、交互、部署四个维度。
- 标准化程度最高:OMG 国际标准,工具链最成熟(EA、StarUML、PlantUML 等)。
- 通用性最强:任何软件系统都能用 UML 描述。
- 地位:建模领域的 lingua franca(通用语)。
8.2 领域制高点
| 场景 | 最优选择 | 理由 |
|---|---|---|
| 通用软件建模 | UML | 覆盖面广,最通用 |
| 复杂分布式系统验证 | TLA+ | 数学证明,UML 无此能力 |
| 系统工程(软硬融合) | SysML v2 | 远超 UML 的系统工程能力 |
| 嵌入式实时系统 | AADL | 直接对接时序分析和硬件绑定 |
| 企业架构建模 | ArchiMate | 业务到技术全栈,TOGAF 配套 |
| 业务流程 | BPMN | 专用流程,可执行 |
| 并发系统分析 | Petri Nets | 严格的数学分析能力 |
8.3 结论
| 维度 | 排序 |
|---|---|
| 通用性 | UML > SysML > ArchiMate > C4 |
| 形式化验证能力 | TLA+ ≈ Coq ≈ Alloy > Event-B > Z > UML(无) |
| 系统工程深度 | SysML v2 ≈ AADL > UML |
| 企业架构宽度 | UAF > ArchiMate > UML |
UML 的定位是建模语言的"通用语"——说的人最多、场景最广,而不是每个细分领域的性能冠军。选择建模语言应遵循"够用即为最优"原则:系统越复杂、安全要求越高,越倾向形式化方法;系统越通用、团队越大,越倾向 UML。