UML(统一建模语言)的九种常见图可以分为两大类:结构图 和行为图。
结构图 用于展示系统静态的、不变的部分,就像建筑的蓝图,描述有什么构件。
行为图 用于展示系统动态的、变化的部分,就像建筑的使用手册,描述构件之间如何协作完成功能。
下面我为你详细介绍这九种图。
一、结构图
1. 类图
- 核心作用:描述系统中所包含的类、类的内部结构(属性和方法)以及类之间的关系(如关联、依赖、继承等)。它是面向对象系统建模中最常用、最基础的图。
- 使用场景:在系统分析和设计阶段,用于建立领域模型或设计模型。
- 简单比喻:就像建筑的设计图纸,标明了每个房间(类)的功能(方法)、里面的家具(属性)以及房间之间的门和走廊(关系)。
示例:一个简单的“订单”系统类图
2. 对象图
- 核心作用:展示在系统某一特定时刻,一组对象实例的状态以及它们之间的链接关系。可以看作是类图的一个实例。
- 使用场景:用于解释复杂的类图,或表示在运行时某个瞬间的对象关系。
- 与类图的区别:类图描述“类别”,对象图描述某个时间点的具体“例子”。
示例:上述类图在某一时刻的对象实例
3. 组件图
- 核心作用:描述软件构件(如可执行文件、库、配置文件等)之间的组织结构和依赖关系。它关注的是系统的物理构成。
- 使用场景:在系统实现和部署阶段,帮助开发人员理解模块划分和依赖。
- 简单比喻:就像汽车的设计图,标明了发动机、变速箱、车轮等组件以及它们之间的接口。
4. 部署图
- 核心作用:描述系统硬件节点的拓扑结构以及软件组件在这些节点上的部署情况。它展示了系统的物理架构。
- 使用场景:在系统实施阶段,用于指导软硬件环境的搭建。
- 简单比喻:就像一张服务器机房地图,标明了哪些服务器(节点)上运行着哪些程序(组件)。
5. 包图
- 核心作用:用于将模型元素(如类、用例等)分组,形成更高层次的组织单元(包),并描述包之间的依赖关系。主要用于管理大型项目的复杂性。
- 使用场景:在项目初期进行模块划分,管理命名空间。
- 简单比喻:就像电脑中的文件夹,把相关的文件(类、接口)放在一起,方便管理。
6. 复合结构图
- 核心作用:描述一个类或组件内部的复杂结构,展示其内部各组成部分(称为“部件”)之间的协作关系。它比类图更能展示内部的运行逻辑。
- 使用场景:当某个类或组件非常复杂,需要进一步分解时使用。
二、行为图
7. 用例图
- 核心作用:从用户角度描述系统的功能需求,指出各个功能的操作者(参与者)是谁。它不关心功能如何实现,只关心“做什么”。
- 使用场景:在需求分析阶段,用于与客户沟通,明确系统范围。
- 简单比喻:就像饭店的菜单,列出了所有可点的菜(用例)和服务的顾客(参与者)。
示例:一个在线购物系统的用例图
8. 活动图
- 核心作用:描述业务过程或操作行为的步骤流程,特别强调活动的顺序和并行性。类似于流程图,但功能更强大(支持并行分支、泳道等)。
- 使用场景:建模业务流程、复杂算法的执行步骤,或用例的具体实现流程。
- 简单比喻:就像公司的行政审批流程图,清晰地展示了从申请到批准的每一步。
9. 状态机图
- 核心作用:描述一个特定对象在其生命周期内,因外部事件而发生状态变化的序列。它关注的是单个对象的状态流转。
- 使用场景:当某个对象的行为取决于其状态时(如订单、电梯、门),用于建模其生命周期。
- 简单比喻:就像电灯的开关,有“开”和“关”两种状态,按动开关(事件)会引起状态的切换。
交互图(行为图的子集,特别重要)
交互图是行为图中专门描述对象之间交互关系的图,包括以下四种,但常将时序图和通信图列为最常用的两种。
10. 时序图
- 核心作用:强调消息的时间顺序,显示对象之间动态协作关系。它按时间顺序排列交互的对象和它们之间传递的消息。
- 使用场景:详细分析一个用例的实现过程,清晰地看到消息的调用顺序。
- 简单比喻:就像一场戏剧的剧本,严格规定了每个角色(对象)在什么时间点说哪句台词(消息)。
示例:用户登录过程的时序图
11. 通信图(原名协作图)
- 核心作用:强调对象之间的组织结构(链接关系) 以及它们之间传递的消息。它和时序图包含的信息量是等价的,但侧重点不同。
- 与时序图的区别:时序图强调何时交互,通信图强调和谁交互。
12. 交互概览图
- 核心作用:是活动图和时序图的混合体,它从高层概览一系列交互流程(通常由多个时序图或通信图组成)之间的控制流。
13. 定时图
- 核心作用:是时序图的一种变体,特别强调消息之间跨越临界点的时间约束,常用于实时系统或嵌入式系统。
总结与如何选择
图类型 | 分类 | 核心关注点 | 关键问题 |
---|---|---|---|
类图 | 结构 | 系统的静态结构 | 系统中有哪些类?它们的关系如何? |
用例图 | 行为 | 系统的功能需求 | 系统为谁提供哪些功能? |
时序图 | 行为(交互) | 对象间消息传递的时间顺序 | 完成一个功能,对象之间按什么顺序调用? |
活动图 | 行为 | 业务流程或工作流 | 完成一个活动需要经历哪些步骤? |
状态机图 | 行为 | 对象的状态变化 | 某个对象在其生命周期中有哪些状态?如何转换? |
组件图 | 结构 | 系统的物理组件 | 系统由哪些软件模块构成? |
部署图 | 结构 | 系统的物理部署 | 软件运行在哪些硬件上? |
通信图 | 行为(交互) | 对象间的组织结构和交互 | 为了完成功能,哪些对象需要协作? |
包图 | 结构 | 模型的逻辑分组 | 如何组织大量的类、用例等模型元素? |