第四关 · 系统设计与建模

总时长:48 小时 | 目标:解决"如何把脑子里的架构,变成别人能看懂的图纸?" 考试映射:综合知识 3-5 题 | 案例分析:⭐ 2024年5月真题(设计类分类+活动图vs流程图+状态图填空,25分) | 论文:案例分析的基础,较少直接考


Step 1:本关资料(海量输入)

| 资料类型 | 具体资料 | 用途 | |---------|---------|------| | 教材 | 《架构师教程》第 8-9 章(UML 建模、系统设计) | 掌握 UML 图分类、用例关系、设计类分类 | | 真题 | 2020-2025 综合知识·UML/建模部分(约 25 题) | 锁定高频考点(图分类、用例关系、设计类分类) | | 案例真题 | 2024年5月案例二(设计类分类+活动图vs流程图,25分)+ 2023年上 DFD 纠错 | 掌握填空题和对比题标准答案 | | 补充 | UML 官方图例参考 | 理解各种 UML 符号的标准画法 |

精准阅读策略

  1. UML 三大分类(结构图/行为图/交互图)必背
  2. 用例三种关系(包含/扩展/泛化)必背——每年必考
  3. 设计类三种类型(实体/边界/控制)必背——2024年5月案例真题

Step 2:本关心智模型

模型 1:UML 图分类体系——"14 种图分三类,每类描述系统的不同视角"

  • 核心思想:UML 的 14 种图不是孤立的,它们分三大类,分别描述系统的静态结构(结构图)、动态行为(行为图)和对象交互(交互图)。选对图 = 准确传达设计意图。
  • 关键变量:描述静态还是动态、描述整体结构还是局部交互
  • 应用场景:综合知识选择题("用XX图描述XX")、案例分析填空题
  • 局限性:UML 图只是设计工具,不是设计本身。好的架构师不会为了画图而画图
  • 考试映射:每年必考 3-5 题

| 大类 | 包含的图 | 描述什么 | |------|---------|---------| | 结构图 | 类图、对象图、组件图、部署图、包图、复合结构图 | 系统的静态结构 | | 行为图 | 用例图、活动图、状态图 | 系统的行为和变化 | | 交互图 | 时序图(顺序图)、通信图(协作图)、交互概览图 | 对象间的交互和消息传递 |

模型 2:用例关系三件套——"包含 = 都需要,扩展 = 有时需要,泛化 = 是一种"

  • 核心思想:用例之间只有三种关系,不要和类图的关系混淆。包含(都必须执行)、扩展(条件满足时执行)、泛化(子用例是一种父用例)。记住:用例之间没有聚合关系!
  • 关键变量:箭头方向(包含:基本→抽象;扩展:扩展→基本;泛化:子→父)
  • 应用场景:综合知识选择题("不属于用例关系的是")、案例分析用例图填空
  • 局限性:实际项目中用例图的使用频率在降低,但考试仍然必考
  • 考试映射:每年必考 1-2 题

| 关系 | 含义 | 箭头方向 | 关键词 | |------|------|---------|--------| | 包含(Include) | 基本用例必须执行包含用例 | 基本 → 抽象(虚线 + <>) | "都需要" | | 扩展(Extend) | 特定条件下可选执行扩展用例 | 扩展 → 基本(虚线 + <>) | "有时需要" | | 泛化(Generalization) | 子用例继承父用例 | 子 → 父(空心三角箭头) | "是一种" |

模型 3:设计类三分类——"实体存数据,边界接交互,控制管逻辑"

  • 核心思想:设计类分三种:实体类(映射业务实体,持久存储)、边界类(封装用例内外的信息流动,即界面/接口)、控制类(控制用例执行逻辑,通常由动宾短语转化)。这是 MVC 模式在设计层面的体现。
  • 关键变量:类名特征(实体=名词,边界=名词+页面/表单,控制=动宾短语)
  • 应用场景:2024年5月案例真题(给定类名,让你分类)
  • 局限性:现代开发中实体类和边界类的边界越来越模糊(如 ViewModel)
  • 考试映射:案例分析 12 分大题

| 类型 | 职责 | 判断方法 | 实例 | |------|------|---------|------| | 实体类 | 保存需要持久存储的信息 | 名词:商品、订单、用户 | 商品、订单、注册用户、购物车 | | 边界类 | 封装用例内外流动的信息 | 名词+页面/表单 | 商品信息页面、订单表单 | | 控制类 | 控制用例工作 | 动宾短语 | 订单结算、订单支付、备货 |


Step 3:本关分歧点

分歧点 1:活动图 vs 流程图——"面向对象"还是"面向过程"?

| 维度 | A 方:活动图 | B 方:流程图 | |------|------------|------------| | 范式 | 面向对象 | 面向过程 | | 重点 | 系统的行为 | 处理过程 | | 并发 | ✅ 能表示并发活动 | ❌ 不能表示并发 | | 对象 | 活动可以分配给对象 | 没有对象概念 |

考试倾向:2024年5月案例真题直接考了三点区别。记住"面向对象 + 能表示并发"就够了。

分歧点 2:顺序图 vs 通信图——"同一交互的两种视角"

| 维度 | A 方:顺序图 | B 方:通信图 | |------|------------|------------| | 强调 | 消息的时间顺序 | 对象间的组织结构 | | 表现 | 垂直时间轴,消息按时间排列 | 对象图 + 编号消息 | | 本质 | 同一个东西的不同视角,可以互相转换 | — |

考试倾向:综合知识选择题偶尔考,记住"顺序图强调时间,通信图强调结构"。

分歧点 3:组合 vs 聚合——"同生共死"还是"可以分开"?

| 维度 | A 方:组合(Composition) | B 方:聚合(Aggregation) | |------|------------------------|------------------------| | 核心 | 整体与部分,生命周期相同 | 整体与部分,生命周期不同 | | 符号 | 实心菱形 → 部分 | 空心菱形 → 部分 | | 记忆 | "同生共死" | "可以分开" | | 例子 | 人和心脏(人死心脏死) | 部门和员工(部门没了员工还在) |

考试倾向:选择题偶尔考,记住"实心菱形=组合=同生共死,空心菱形=聚合=可以分开"。


Step 4:闯关任务(动手验证)

任务 1:设计类分类练习(1.5h)

给以下类名分类(实体/边界/控制),限时 10 分钟: 商品、商品详情页、购物车、购物车结算、用户注册、注册表单、订单支付、支付结果页、商品搜索、搜索结果页

任务 2:用例图绘制(2h)

为你的 AIoT 项目"用户购买扫地机器人配件"画用例图:

  1. 列出参与者和用例
  2. 标注用例之间的关系(包含/扩展/泛化)
  3. 检查是否有"聚合"等错误关系混入

任务 3:状态图绘制(2h)

为 AIoT 扫地机器人画状态图:

  • 状态:离线、在线、清扫中、充电中、待机、故障
  • 标注每个转换的触发事件

Step 4.5:💬 AI 教练对话

使用时机:UML 图选择题不确定时、画图后需要审查时

Review Agent(UML 图审查)

我画了 AIoT 项目的 UML [类图/用例图/顺序图]。

[描述你的图或粘贴文字描述]

请帮我检查:
1. 类之间的关系是否正确?(继承/实现/组合/聚合/关联/依赖)
2. 用例之间的关系是否正确?(包含/扩展/泛化)
3. 有没有漏掉重要的类或用例?
4. 如果是考试,这个答案能拿几分?

Theory Agent(图的选择)

我有一个系统需求:[描述需求]

请帮我:
1. 应该用哪种 UML 图来描述?为什么?
2. 这张图应该包含哪些元素?
3. 考试中这类题的常见出题方式是什么?

Step 5:关 AI 自测

⚠️ 关闭 AI,独立完成后再对照答案

自测题 1(综合知识风格)

UML 用例图中,不属于用例之间关系的是?

A. 包含关系 B. 聚合关系 C. 扩展关系 D. 泛化关系

点击查看答案

答案:B. 聚合关系

用例之间只有三种关系:包含(Include)、扩展(Extend)、泛化(Generalization)。聚合关系是类图中的概念,不属于用例关系。

陷阱:这是考试高频陷阱题,每年必考!

自测题 2(综合知识风格)

软件结构的 4+1 视图不包括以下哪个?

A. 逻辑视图 B. 数据视图 C. 进程视图 D. 物理视图

点击查看答案

答案:B. 数据视图

4+1 视图 = 逻辑视图 + 开发视图 + 进程视图 + 物理视图 + 场景。没有"数据视图"。

自测题 3(设计类分类)

请将以下类名分类为实体类、边界类或控制类: "商品"、"订单详情页"、"订单结算"、"用户"、"支付接口"、"库存查询"

A. 实体类:商品、用户;边界类:订单详情页、支付接口;控制类:订单结算、库存查询 B. 实体类:商品、用户;边界类:订单详情页;控制类:订单结算、支付接口、库存查询 C. 实体类:商品、订单详情页、用户;边界类:支付接口;控制类:订单结算、库存查询

点击查看答案

答案:A

  • 实体类(名词,持久存储):商品、用户
  • 边界类(界面/接口):订单详情页(页面)、支付接口(外部系统接口)
  • 控制类(动宾短语):订单结算(动宾)、库存查询(动宾)

判断方法:实体=名词且需持久化;边界=页面/接口/表单;控制=动宾短语。

自测题 4(活动图 vs 流程图)

活动图和流程图的主要区别是什么?(至少列出 3 点)

点击查看答案
  1. 范式不同:活动图是面向对象的,流程图是面向过程的
  2. 描述重点不同:活动图描述系统的行为,着重表现对象活动的顺序关系;流程图着重描述处理过程,有严格的顺序、分支和循环关系
  3. 并发能力不同:活动图能表示并发活动(用分叉/汇合),流程图不能表示并发

Step 6:费曼输出 + 信心校准

一句话版本

UML 建模 = 用 14 种图(分结构/行为/交互三大类)描述系统的静态结构和动态行为,核心是用例关系(包含/扩展/泛化)、设计类分类(实体/边界/控制)、活动图 vs 流程图。

三分钟版本

(对着镜子或录音讲 3 分钟,不看书)

系统建模的核心工具是 UML,14 种图分三大类:结构图(类图、组件图、部署图等,描述静态结构)、行为图(用例图、活动图、状态图,描述动态行为)、交互图(顺序图、通信图,描述对象间交互)。

用例图是需求分析阶段最常用的,用例之间只有三种关系:包含(都需要)、扩展(有时需要)、泛化(是一种)。注意:用例之间没有聚合关系! 这是每年必考的陷阱。

设计类分三种:实体类(存数据的名词,如商品、订单)、边界类(界面和接口,如订单表单)、控制类(动宾短语,如订单结算)。2024年5月案例真题直接考了这个分类。

活动图 vs 流程图三点区别:面向对象 vs 面向过程、能表示并发 vs 不能、描述行为 vs 描述处理过程。

信心自评

| 知识点 | 信心 1-5 | 能否给别人讲清楚? | 需要复习? | |--------|---------|------------------|-----------| | UML 三大分类 | /5 | □ 能 □ 不能 | □ 需要 | | 用例三种关系 | /5 | □ 能 □ 不能 | □ 需要 | | 设计类三种类型 | /5 | □ 能 □ 不能 | □ 需要 | | 活动图 vs 流程图 | /5 | □ 能 □ 不能 | □ 需要 | | 类图六种关系 | /5 | □ 能 □ 不能 | □ 需要 | | 4+1 视图 | /5 | □ 能 □ 不能 | □ 需要 |


📌 常见误区

  1. "用例之间有聚合关系" → 错!聚合是类图概念,用例之间只有包含/扩展/泛化
  2. "活动图就是 UML 版流程图" → 错!活动图是面向对象的,能表示并发
  3. "边界类就是前端页面" → 不完全对!边界类还包括外部系统接口(如支付接口)
  4. "组合和聚合没区别" → 错!组合=同生共死(实心菱形),聚合=可以分开(空心菱形)

🔧 工程映射

  • 需求评审 → 用例图(明确系统边界和功能范围)
  • 技术方案评审 → 类图 + 顺序图(描述核心对象和交互流程)
  • 架构文档 → 4+1 视图(逻辑视图=类图、开发视图=组件图、进程视图=部署图、物理视图=部署图)
  • 状态机设计 → 状态图(订单状态、设备状态流转)

✅ 通关标准

  • [ ] 信心自评所有知识点 ≥ 4/5
  • [ ] 三分钟版本能脱稿讲完
  • [ ] 自测题正确率 ≥ 75%
  • [ ] 能口述 UML 三大分类 + 每类包含哪些图
  • [ ] 能口述用例三种关系(包含/扩展/泛化)
  • [ ] 能口述设计类三种类型(实体/边界/控制)
  • [ ] 真题正确率 ≥ 80%