软考中级-软件设计师 UML图详解( 类图,对象图,用例图,序列图,通信图,状态图,活动图,构件图,部署图)
UML图详解
- 🧠 一、UML(Unified Modeling Language)统一建模语言
- 🔗 二、UML 中的关系
- 1️⃣ 依赖(Dependency)
- 2️⃣ 关联(Association)
- 3️⃣ 泛化(Generalization)
- 4️⃣ 实现(Realization)
- 🗺️ 三、UML图(9大重点图)
- 🧱 1. 类图(Class Diagram)
- 👤 2. 对象图(Object Diagram)
- 🎯 3. 用例图(Use Case Diagram)
- 🕒 4. 顺序图 / 序列图 —— 交互图(Sequence Diagram)
- 🔁 5. 通信图 / 协作图(Communication Diagram)
- 🔄 6. 状态图 / 状态机图(State Diagram)
- 🔧 7. 活动图(Activity Diagram)
- 🧩 8. 构件图(Component Diagram)
- 📦 9. 部署图(Deployment Diagram)
- ✅ 总结对比表:
🧠 一、UML(Unified Modeling Language)统一建模语言
-
UML的三个要素:
-
基本构造块:就像乐高积木的零件,是组成UML模型的基础元素(对应下文的事物、关系、图)。
-
规则:就像乐高的拼装说明书,规定哪些零件可以组合、如何组合。
-
公共机制:相当于乐高通用的拼接技巧(比如如何固定特殊零件),是适用于整个UML的通用规则。
-
-
UML词汇表的三种构造块:
-
事物(Things):模型中的"名词",代表具体概念。比如:
- 类(Class)、对象(Object)、用例(Use Case)等。
-
关系(Relationships):模型中的"动词",表示事物间的联系。比如:
- 继承关系、关联关系、依赖关系等。
-
图(Diagrams):将事物和关系可视化呈现的"画布"。比如:
- 类图、时序图、用例图等(共13种标准图)。
-
🔗 二、UML 中的关系
UML 中的关系用来表示模型元素之间的各种联系,主要包括 4 种基本关系:
依赖(Dependency)、关联(Association)、泛化(Generalization)、实现(Realization)
1️⃣ 依赖(Dependency)
✅ 定义:
依赖是一种使用关系,表示一个元素(A)依赖另一个元素(B)的定义或行为。如果 B 发生变化,可能会影响到 A 的正确性。
📌 语义:A 依赖于 B,B 被 A 依赖
✅ 图形表示:
- 用一条带箭头的虚线表示,箭头从依赖者指向被依赖者。
A ---------> B (虚线)
✅ 举例:
-
类A的方法中使用了类B的对象作为参数、局部变量或返回类型;
-
例如:某个控制器类依赖服务类:
Controller ---> Service
2️⃣ 关联(Association)
✅ 定义:
关联是类与类之间的一种结构关系,表示类之间存在某种联系,比如“拥有”、“引用”等。
✅ 图形表示:
-
使用一条带方向的实线连接两个类;
-
可以在两端标注:
-
角色名(role)
-
多重性(Multiplicity)
-
导航方向
-
Person -------- Car
✅ 举例:
-
人和汽车类之间的关系(一个人可以拥有多辆车):
Person 1 -------- 0..* Car
🔶 聚合(Aggregation)【空心菱形】
聚合是关联的一个特例,表示整体与部分的关系,但部分可以脱离整体单独存在。
-
图形:空心菱形连接整体类。
-
举例:班级包含多个学生,但学生可以脱离班级存在。
Class ◇-------- Student
🔷 组合(Composition)【实心菱形】
组合是更强的聚合,表示整体与部分生命周期一致。一旦整体销毁,部分也必须销毁。
-
图形:实心菱形连接整体类。
-
举例:房子和房间,房间不能脱离房子单独存在。
House ◆-------- Room
✅ 多重度(Multiplicity)
表示关联两端实例的数量约束:
符号 | 意义 |
---|---|
0…1 | 零个或一个 |
1 | 恰好一个 |
0…* | 零个或多个 |
1…* | 一个或多个 |
n | 恰好 n 个 |
n…m | n 到 m 个之间(含) |
✅ 关联其他补充内容:
-
关联方向(有向或无向):默认双向,可以加箭头限制方向。
-
关联名(Association Name):可写在线上表示关系含义。
-
关联类(Association Class):当关联自身具有属性时,可以用关联类(一个虚线连接到一类)。
3️⃣ 泛化(Generalization)
✅ 定义:
泛化表示继承关系,一种“is-a”关系。子类是父类的一种特殊形式,拥有父类的结构和行为,可以扩展或重写。
📌 子类继承父类,父类泛化子类
✅ 图形表示:
- 使用一条带空心三角箭头的实线,从子类指向父类。
Student ─────▷ Person
✅ 举例:
-
Cat 泛化于 Animal;
-
Manager 泛化于 Employee。
4️⃣ 实现(Realization)
✅ 定义:
实现是一种语义关系,一个元素(类或构件)承诺实现另一个元素(接口或用例)定义的契约。
📌 通常出现在接口和实现类之间
✅ 图形表示:
使用一条带空心三角箭头的虚线,从实现类指向接口。
UserServiceImpl ------▷ IUserService
🧠 总结对比表:
关系类型 | 图形 | 方向 | 用途说明 |
---|---|---|---|
依赖 | 虚线箭头 | 有向 | 使用关系,短期引用或临时依赖 |
关联 | 实线 | 可选 | 对象间存在长期联系,如引用、拥有关系 |
聚合 | 空心菱形 | 双向 | 整体-部分关系,生命周期独立 |
组合 | 实心菱形 | 双向 | 整体-部分强依赖,生命周期一致 |
泛化 | 实线空心箭头 | 有向 | 类之间继承关系,子类可代替父类 |
实现 | 虚线空心箭头 | 有向 | 类对接口的实现或用例实现 |
🗺️ 三、UML图(9大重点图)
🧱 1. 类图(Class Diagram)
✅ 类指类名:
+
public 共有的
-
private 私有的
#
protected 受保护的
~
package 包
✅ 系统使用类的方法:
①对系统词汇建模
②对简单的协作建模
③对逻辑数据库模式建模
类图:一组对象,接口,协作和他们之间的关系
👤 2. 对象图(Object Diagram)
对象图展现了某一时刻一组对象以及它们之间的关系,描述了在类图中所建立的事物的实例的静态快照。对象图一般包括对象和链。
🎯 3. 用例图(Use Case Diagram)
用例图展现了一组用例、参与者(Actor)以及它们之间的关系。
用例之间的扩展关系(<>)和包含关系(<>),参与者和用例之间的关联关系,用例与用例以及参与者与参与者之间的泛化关系。
✅(1)包含关系(用例和用例之间的关系)
一个用例包含另一个用例
✅(2)扩展关系(用例和用例之间的关系)
一个用例执行的时候,可能发生一些特殊情况或可选情况,这个用例就是这个用例的扩展用例
✅(3)泛化关系(参与者与参与者之间的关系,用例与用例之间的关系)
✅(4)关联(参与者与用例之间的关系)
当系统的静态用例视图建模时,可以使用用例图的方式
-
①对系统的语境建模
-
②对系统的需求建模
将系统的一个功能描述成一系列事件
🕒 4. 顺序图 / 序列图 —— 交互图(Sequence Diagram)
(1)交互图用于对系统的动态方面进行建模。交互图由一组对象和它们之间的关系组成,包含它们之间可能传递的消息。
(2)序列图是强调消息时间顺序的交互图。通信图是强调接收和发送消息的对象的结构组织的交互图。
(3)序列图是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动。形成序列图时,首先把参加交互的对象放在图的上方,沿水平方向排列。通常把发起交互的对象放在左边,下级对象依次放在右边。然后,把这些对象发送和接收的消息沿垂直方向按时间顺序从上到下放置。
(4)序列图有对象生希线。对象生命线是一条垂直的虚线,表示一个对象在一段时间内存在。
(5)控制焦点:是一个瘦高的矩形。矩形的顶部表示动作的开始,底部表示动作的结束(可以由一个返回消息来标记)。还可以通过将另一个控制焦点放在它的父。
(6)生命周期:create开始,destory结束
🔁 5. 通信图 / 协作图(Communication Diagram)
(1)通信图(协作图):强调收发消息的对象的结构组织。通信图强调参加交互的对象的组织。
(2)首先要将参加交互的对象作为图的顶点,然后把连接这些对象的链表示为图的弧,最后用对象发送和接收的消息来修饰这些链。
(3)通信图有顺序号。为表示一个消息的时间顺序,可以给消息加一个数字前缀(从1号消息开始),在控制流中,每个新消息的顺序号单调增加(如2、3等)。为了显示嵌套,可使用带小数点的号码(1表示第一个消息:1.1表示嵌套在消息1中的第一个消息,1.2 表示嵌套在消息1中的第二个消息,等等)。沿同一个链可以显示许多消息(可能发自不同的方向),并且每个消息都有唯一的一个顺序号。
(4)序列图和通信图是同构的,它们之间可以相互转换。
(5)通信图,对象之间的消息流及顺序
🔄 6. 状态图 / 状态机图(State Diagram)
(1)状态图展现了一个状态机它由状态、转换、事件和活动组成。状态图关注系统的动态视图,对于接口、类和协作的行为建模尤为重要,强调对象行为的事件顺序
。
(2)状态和活动
①状态是任何可以被观察到的系统行为模式,一个状态代表系统的一种行为模式。既改变状态,又做动作。
②状态主要有:初态(即初始状态)、终态(即最终状态)和中间状态。状态之间为状态转换,用一条带箭头的线表示。带箭头的线上的事件发生时,状态转换开始(有时也称之为转换“点火”或转换被“触发”)。
一张状态图中只能有一个初态,而终态可以没有,也可以有多个。
③活动表(活动):活动名/动作表达式
经常使用三种标准事件:entry,exit,do
- entry:入口动作,进入状态,立即执行
- exit:出口动作,退出状态,立即执行
- do:内部活动,占有有限时间,并可以中断的工作
(3)事件
①事件是在某个特定时刻发生的事情,它是对引起系统做动作或从一个状态转换到另一个状态的外界事件的抽象。
②事件就是引起系统做动作或(和)转换状态的控制信息。
③
④转换包含两个状态:原状态和目标状态,转换还包含事件
,监护条件
,动作
⑤事件触发转换(迁移)
⑥活动(动作)可以在状态内执行,也可以在状态转换(迁移)时进行
⑦监护条件是一个布尔表达式
,事件说明,监护条件,为真则发生转换;无事件说明,监护条件为真则为真
(4)组合状态(超状态),嵌套状态(子状态)
(5)状态图是对反应型对象建模
这些动态方面可以包括出现在系统体系结构的任何视图中的任何一种对象的按事件排序的行为,这些对象包括类(各主动类)、接口、构件和结点。
🔧 7. 活动图(Activity Diagram)
(1)活动图是一种特殊的状态,它展现了在系统内从一个活动到另一个活动的流程
。活动图专注于系统的动态视图
,它对于系统的功能建模特别重要,并强调对象间的控制流程。
(2)使用活动图的方式:对工作流建模,对操作建模
🧩 8. 构件图(Component Diagram)
(1)构件图展现了一组构件之间的组织和依赖
。
(2)构件图专注于系统的静态实现视图。它与类图相关,通常把构件映射为一个或多个类、接口或协作。
(3)部署,组件之间的关系类似于依赖
📦 9. 部署图(Deployment Diagram)
(1)部署图是用来对面向对象系统的物理方面建模的方法
(2)静态图
(3)部署图展现了系统软硬件之间的关系,在实施阶段使用
(4)立体图,>表示制品。
✅ 总结对比表:
图类型 | 描述对象 | 静态/动态 | 关注点 |
---|---|---|---|
类图 | 类之间关系 | 静态 | 结构设计 |
对象图 | 对象实例 | 静态 | 实例快照 |
用例图 | 用户需求 | 静态 | 功能与用户交互 |
序列图 | 对象间消息 | 动态 | 时间顺序的交互 |
通信图 | 对象间消息 | 动态 | 结构与消息编号 |
状态图 | 对象状态 | 动态 | 状态变化 |
活动图 | 活动流程 | 动态 | 控制流与条件判断 |
构件图 | 软件模块 | 静态 | 模块化结构 |
部署图 | 硬件与软件组件 | 静态 | 系统部署结构 |
软考中常见选择题选项:
- 类图:一组对象、接口、协作和它们之间的关系
- 用例图:一组用例、参与者以及它们之间的关系
- 对象图:某一时刻一组对象以及它们之间的关系
- 序列图:以时间顺序组织的对象之间的交互活动
- 通信图:对象之间的消息流及其顺序
- 状态图:描述反应型对象状态的变化和状态之间的转换
- 活动图:系统内一个活动到另一个活动的流程
- 构件图:组件之间的组织和依赖
- 部署图:系统中软件和硬件之间的物理关系
创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️