UML 核心知识复习指南

UML 核心知识复习指南

1. 静态结构图 (Structural Diagrams)

结构图描述系统的静态组成部分,即“系统里有什么”。

1.1 类图 (Class Diagram)

  • 核心: 描述类、接口及其相互关系(继承、关联、聚合、组合)。
  • 用途: 系统建模的基础,直接映射到面向对象代码。
  • 绘制要点: 使用矩形表示类,分为类名、属性、方法三层。

深入理解六种关系 (Relationships)

类图之间的箭头不仅是连接,它们代表了类与类之间耦合度的强弱。

1) 泛化 (Generalization)
  • 含义: 即“继承”关系。子类继承父类的所有特征。
  • 符号: 实线 + 空心三角形箭头
2) 实现 (Realization)
  • 含义: 类实现接口的规范。
  • 符号: 虚线 + 空心三角形箭头
3) 关联 (Association)
  • 含义: 类与类之间的长久连接(如:老师有学生)。通常作为成员变量存在。
  • 符号: 实线箭头
4) 依赖 (Dependency)
  • 含义: 最弱的关系。一个类作为另一个类的方法参数或局部变量使用(“用到”的关系)。
  • 符号: 虚线箭头
5) 聚合 (Aggregation)
  • 含义: “整体与部分”的关系,但部分可以离开整体独立存在(如:公司与员工)。
  • 符号: 实线 + 空心菱形
6) 组合 (Composition)
  • 含义: 强关联的“整体与部分”。部分不能离开整体(如:公司与部门,公司倒闭部门即消失)。
  • 符号: 实线 + 实心菱形

3. 多重性 (Multiplicity)

多重性用于标注在关系线上,表示一个类的实例可以与多少个另一个类的实例相关联。

  • 0..1:0 个或 1 个
  • 1:必须且仅有 1 个
  • 0..**:0 个或多个
  • 1..*:至少有 1 个

image

1.2 对象图 (Object Diagram)

1. 对象图的核心元素

在对象图中,每个矩形代表一个具体的实例,而非抽象的类。

A. 命名规范(Name and Class)

对象的名称通常带有下划线(在某些工具中),格式为:

  • 对象名 : 类名 (如 myPhone : iPhone)
  • : 类名 (匿名对象,当你只关心该类的一个实例时)
B. 属性槽(Attribute Slots)

不同于类图只定义属性类型,对象图必须显示属性的具体取值

  • 格式:属性名 = 取值 (如 brand = "Apple")

类图中的“关联”在对象图中演变为“链接”。

  • 链接代表了对象之间的物理或逻辑连接。
  • 链接没有多重性(1..* 等),因为在特定时刻,链接的数量是确定的。

2. 对象图 vs. 类图:关键区别

特性 类图 (Class Diagram) 对象图 (Object Diagram)
抽象程度 抽象的系统逻辑 具体的运行状态
元素内容 属性类型、方法签名 属性的具体数值
生命周期 在整个系统生命周期内保持稳定 随程序运行动态变化(瞬时性)
关联方式 定义了可能存在的关系(如 1对多) 展示了实际存在的连接(1对1)

3. 对象图的典型应用场景

  1. 解释复杂递归关系: 例如“组织架构”或“树状结构”,类图很难直观展示父子节点的嵌套,对象图可以清晰展示。
  2. 调试与验证: 当你发现系统逻辑在某种特定情况下出错时,画出该时刻的对象图有助于理清关系。
  3. 展示示例数据: 为非技术人员演示系统如何处理具体业务数据。

模拟一个“图书馆借阅”场景的快照

image


5. 高级细节:链接的类型

在对象图中,虽然通常只画直线,但有时需要标注更深层的含义:

  • 组合链接 (Composition Link): 表示一个对象在物理上包含另一个对象。例如“一辆车对象”链接着“四个特定的轮胎对象”。
  • 多重链接: 如果一个类图中定义了 1..* 关系,在对象图中你可能需要画出 3 个相互独立的实例来展示这一多重性。

总结

复习对象图时,请记住:“它是具体的、有值的、瞬时的”。它是为了在某个特定时间点验证类图设计的正确性而存在的。

1.3 组件图 (Component Diagram)

1. 组件图的核心元素

1.1 组件 (Component)
  • 定义: 系统中一个封装良好的、可替换的逻辑单元。
  • 符号: 右上角带有两个小矩形图标的大矩形,或使用关键字 <<component>>
  • 实例: 一个 .jar 包、一个 .dll 动态链接库、一个独立的微服务或一个数据库模式。
1.2 接口 (Interfaces)

这是组件图的精髓,分为两种类型:

  • 供求接口 (Provided Interface): 组件提供给外部使用的功能。符号是 “棒棒糖” (Lollipop) —— 一个带圆圈的实线。
  • 需求接口 (Required Interface): 组件运行所需的外部服务。符号是 “半圆杯” (Socket) —— 一个带半圆的实线。
1.3 端口 (Port)
  • 定义: 组件与外部环境交互的显式窗口。通常在组件边缘画一个小正方形,接口挂载在端口上。

2. 组件之间的连接方式

  1. 委托 (Delegation): 将发送到组件外部接口的消息转发到组件内部的特定类。
  2. 装配连接器 (Assembly Connector): 将一个组件的“供求接口”与另一个组件的“需求接口”无缝对接(即棒棒糖正好插进插座里)。

3. 组件图的三个维度

视角 描述 常见对象
源代码视图 编译时的依赖关系 源文件、头文件、类库
可执行视图 运行时的物理分块 .exe.war.docker_image
部署视图 组件在硬件上的物理分布 数据库服务器组件、Web服务组件

image

1.4 部署图 (Deployment Diagram)

1. 部署图的核心元素

1.1 节点 (Node)

节点代表一个物理资源或计算资源。在 UML 中通常用 3D 立方体 表示。

  • 设备节点 (Device): 具有处理能力的硬件,如服务器、PC、智能手机、传感器。
  • 执行环境 (Execution Environment): 运行在硬件之上的软件容器,如 JVMDocker ContainerTomcat Server操作系统
1.2 伪影/制品 (Artifact)
  • 定义: 物理世界中的文件。它是组件的具体物理展现。
  • 示例: user-service.jarconfig.yamlapp.exe
  • 部署: 符号上,制品通常放置在节点内部,表示该节点“承载”了该软件。
1.3 路径 (Path/Communication Path)
  • 定义: 节点之间的通信连接。
  • 属性: 线上通常会标注通信协议,如 TCP/IPHTTPJDBCgRPC

2. 部署图的两种形式

  1. 描述型 (Descriptor Level): 概括性的架构,如“Web 服务器”与“数据库服务器”的连接。
  2. 实例型 (Instance Level): 具体的部署情况,标注出具体的 IP 地址或服务器名称,如“生产环境 01 号节点”。

3. 部署图的关键关系

  • 部署 (Deploy): 一个制品“投射”到一个节点上的过程,常用带 <<deploy>> 字样的虚线箭头表示。
  • 嵌套 (Nested Nodes): 一个节点可以包含另一个节点(例如:物理服务器包含虚拟机,虚拟机包含 Docker 容器)。

image


2. 动态行为图 (Behavioral Diagrams)

行为图描述系统的逻辑流转,即“系统如何运行”。

2.1 用例图 (Use Case Diagram)

1. 核心构成要素深度解析

1.1 参与者 (Actor)
  • 不仅仅是人: 参与者可以是人、外部系统(如支付网关)、硬件设备(如传感器)或时间(定时任务)。
  • 角色非职位: 一个人可以充当多个参与者(如既是“店员”又是“管理员”)。
  • 符号: “小人”图标。
1.2 用例 (Use Case)
  • 特征: 必须是动词+名词(如“下单”、“查询余额”)。
  • 价值导向: 一个用例必须为参与者产生可观测的价值(例如“输入密码”通常不是独立用例,它是“登录”的一部分)。
  • 符号: 椭圆形。
1.3 系统边界 (System Boundary)
  • 作用: 明确哪些功能在系统内,哪些在系统外。
  • 符号: 包围用例的矩形框。

2. 关键关系(复习重点/难点)

在用例图中,用例之间不仅仅是独立的,它们存在三种核心关系:

关系类型 关键字 说明 符号
包含 (Include) <<include>> 必须发生的步骤。基用例包含子用例的功能。 虚线箭头 + <<include>>
扩展 (Extend) <<extend>> 可选发生的步骤。在特定条件下才执行(如:报错、折扣)。 虚线箭头 + <<extend>>
泛化 (Generalization) 类似于继承。子用例是父用例的一种特例。 实线 + 空心三角形

image

2.2 状态机图 (State Machine Diagram)

1. 核心组成要素

1.1 状态 (State)
  • 初态 (Initial State): 系统的起点,用实心圆点表示。
  • 终态 (Final State): 流程的终点,用圆圈内含实心圆点表示。
  • 简单状态 (Simple State): 对象的一个稳定阶段。
  • 组合状态 (Composite State): 内部还包含嵌套子状态的状态。
1.2 转移 (Transition)

描述对象从一个状态移动到另一个状态的路径。通常包含以下三部分:

  • 事件 (Trigger): 触发状态改变的信号(如 click)。
  • 监护条件 (Guard): 一个布尔表达式,只有为真时才触发转移(格式:[condition])。
  • 动作 (Effect): 转移发生时执行的代码或行为(格式:/action)。

完整格式: 事件 [监护条件] / 动作


2. 状态内的内部行为 (Internal Behaviors)

在一个状态矩形框内部,可以定义该状态在不同阶段的行为:

  • Entry: 进入该状态时立即执行。
  • Exit: 退出该状态前执行。
  • Do: 处于该状态期间持续执行的任务。

3. 高级概念:伪状态 (Pseudo-states)

  • 选择 (Choice/Junction): 用菱形表示,根据不同的条件流向不同的目标状态。
  • 历史状态 (History State): 记住离开组合状态前的最后一个子状态。下次返回时,直接进入该子状态(用圆圈里的 H 表示)。

image

2.3 活动图 (Activity Diagram)

1. 核心构成要素

1.1 动作与节点
  • 动作 (Action): 流程中的最小单元(如“发送确认邮件”)。用圆角矩形表示。
  • 开始/结束节点: 实心圆点表示开始,牛眼圆(圆圈内含实心圆)表示结束。
  • 决策点 (Decision): 菱形。根据条件(Guard)选择不同路径。
1.2 分叉与汇合 (Fork & Join) —— 活动图的灵魂

这是活动图区别于普通流程图的关键:

  • 分叉 (Fork): 一条流分为多条并发执行的流(用粗实线/黑棒表示)。
  • 汇合 (Join): 等待所有并发流完成后,再合为一条流继续执行。
1.3 泳道 (Swimlanes)
  • 作用: 将活动分配给不同的角色部门(如:客户、财务部、仓库)。
  • 形式: 纵向或横向的矩形分区。

2. 对象流 (Object Flow)

活动图不仅可以描述控制流(动作的先后),还可以描述数据(对象)的传递。

  • 符号: 在动作之间画一个矩形代表对象,或者在箭头旁标注对象状态的变化,例如:订单 [已支付]

image

2.4 时序图 (Sequence Diagram)

1. 核心构成要素

1.1 生命周期线 (Lifeline)
  • 符号: 顶部是一个矩形(对象框),下方连接着一条垂直虚线。
  • 表示: 代表系统中的一个对象实例或角色。
  • 激活条 (Activation Bar): 虚线上的窄矩形,表示该对象当前正处于执行状态或正在处理消息。
1.2 消息 (Messages)

消息决定了对象间的协作逻辑:

  • 同步消息 (Synchronous): 实心箭头 + 实线。发送者发出消息后需等待返回(阻塞)。
  • 异步消息 (Asynchronous): 开放箭头 + 实线。发送者发出消息后继续操作(非阻塞)。
  • 返回消息 (Return): 开放箭头 + 虚线。表示先前同步消息的结果返回。
  • 自关联消息: 对象调用自身的方法。

2. 逻辑控制:组合片段 (Combined Fragments)

在复杂的业务中,时序图需要表达“如果”、“循环”等逻辑。UML 使用操作符框来表示:

操作符 含义 类比代码
alt 多选一分支(Alternative) if...else / switch
opt 可选分支(Option) if (没有 else)
loop 循环(Loop) for / while
par 并行(Parallel) 多线程同时执行
ref 引用(Reference) 调用另一个已画好的时序图(子过程)

image

2.5 通信图 (Communication Diagram)

1. 核心构成要素

  • 对象 (Object): 与类图相似,表示参与交互的具体实例。
  • 链接 (Link): 连接对象的实线,表示对象之间存在路径可以发送消息。它是类图中“关联”关系的实例。
1.2 消息 (Messages)

在通信图中,消息标注在链接线旁边,并带有一个方向箭头

1.3 序列编号 (Sequence Numbers)——最关键点

由于通信图没有时间轴,消息的先后顺序完全靠编号来识别:

  • 简单序列: 1, 2, 3... 表示执行顺序。
  • 嵌套序列: 1.1, 1.2, 1.2.1... 表示在执行步骤 1 的过程中产生的子调用。

2. 通信图 vs. 时序图:同源异形

两者统称为交互图 (Interaction Diagrams),信息量基本等价,但侧重点不同:

特性 时序图 (Sequence) 通信图 (Communication)
主轴 时间 (Time) 关系 (Relationship)
空间效率 随时间增长,垂直方向占用空间大 布局紧凑,适合展示复杂的链接网络
逻辑焦点 消息传递的先后顺序 对象的职责分布和结构布局
修改成本 插入新步骤需要上下移动所有元素 只需要在连线上改编号

image


3. 复习速查表

图类型 关键词 适用阶段
类图 结构、关系 详细设计/编码
用例图 角色、功能边界 需求分析
时序图 时间、消息流 逻辑实现
状态图 生命周期、转换 状态机逻辑
活动图 流程、并发 业务逻辑/算法
posted @ 2025-10-14 16:35  QixunQiu  阅读(6)  评论(0)    收藏  举报