11.3.1 例题1:用例图与类图
用例图与类图组合题,是 UML 建模题里很典型的一类。用例图回答“系统对外提供什么功能”,类图回答“系统内部有哪些业务概念及关系”。考试通常会扣掉用例名、类名、扩展条件,让你从题干中提取。
本类题的分值结构
课程中的例题是在线销售学术出版物系统,题目结构很典型:
| 问题 | 填空内容 | 分值线索 |
|---|---|---|
| 问题 1 | 用例图中 4 个用例名 | 4 分 |
| 问题 2 | 扩展用例的扩展条件 | 4 分 |
| 问题 3 | 类图中 7 个类名 | 7 分 |
合计 15 分。可以看出,绝大多数分数不是考“画法”,而是考你能不能从题干中提取词语并放到图中正确位置。
先识别用例图
用例图填空优先找动词短语。题干里的“浏览或检索出版物”“添加到购物车”“注册”“登录”“结账”“选择收货地址”“选择付款方式”都属于系统功能,适合作为用例名。
| 题干表达 | 用例候选 | 说明 |
|---|---|---|
| 未注册客户可以浏览或检索出版物 | 浏览/检索出版物 | 动词 + 名词 |
| 将出版物添加到购物车 | 添加出版物到购物车 | 多个角色都可能使用,可抽成同一用例 |
| 注册客户登录之后可以结账 | 登录、结账 | 直接功能动词 |
| 从地址列表选择收货地址 | 选择收货地址 | 结账过程的一部分 |
| 支持信用卡或银行转账 | 选择付款方式 | 结账过程的一部分 |
做题时不要机械抄长句。长句往往要压缩成“动词 + 名词”的用例名。
include 与 extend 在题干中的信号
结账流程包含若干必走步骤,适合用 include。题干中的“结账操作具体流程如下”就是强信号:后面的选择收货地址、选择付款方式、确认提交订单等都是结账过程的一部分。
扩展关系通常由条件触发。课程例题里有两个典型句式:
| 题干条件 | 扩展用例 | 基本用例 |
|---|---|---|
| 如果没有地址信息,则可以添加新地址 | 添加新地址 | 选择收货地址 |
| 若没有付款方式,则可以添加新的付款方式 | 添加新的付款方式 | 选择付款方式 |
注意箭头方向:extend 箭头指向基本用例。扩展用例是条件满足才执行的可选行为。
mermaid
flowchart LR
Checkout["结账"] -. "<<include>>" .-> Address["选择收货地址"]
Checkout -. "<<include>>" .-> Pay["选择付款方式"]
NewAddress["添加新地址"] -. "<<extend>>\n没有地址信息" .-> Address
NewPay["添加新的付款方式"] -. "<<extend>>\n没有付款方式" .-> Pay再识别类图
类图填空优先找名词。课程例题中,类名主要来自以下几类:
| 题干名词 | 类图含义 |
|---|---|
| 学术出版物 | 父类 |
| 论文、学术报告、讲座资料 | 学术出版物的子类 |
| 客户、未注册客户、注册客户 | 泛化关系 |
| 购物车 | 存放待购买出版物 |
| 订单 | 结账后生成,记录收货地址、付款方式、出版物 |
| 学术出版物目录 | 维护出版物集合 |
当题干出现“包括 A、B、C”或“分为 A 和 B”时,经常对应泛化关系:
mermaid
classDiagram
class AcademicPublication
class Paper
class AcademicReport
class LectureMaterial
AcademicPublication <|-- Paper
AcademicPublication <|-- AcademicReport
AcademicPublication <|-- LectureMaterial“在线销售的学术出版物包括论文、学术报告、讲座资料”,语义就是“论文是一种学术出版物,学术报告是一种学术出版物,讲座资料是一种学术出版物”。
类名位置怎么判定
类名不是只找到词就完了,还要放到正确位置。可以借助关系定位:
| 图上关系 | 填空判断 |
|---|---|
| 泛化箭头指向空位 | 空位是父类 |
| 空位在泛化箭头尾部 | 空位是子类 |
| 菱形在某个空位旁 | 空位是整体 |
| 关联到订单且承载地址、付款方式 | 空位可能是订单 |
| 与出版物集合存在整体-部分 | 空位可能是目录/列表 |
课程中特别提醒:论文、学术报告、讲座资料这些子类顺序通常不强求;但父类位置不能填错。
用例规约怎么写
题目有时会让细化用例描述,也叫用例规约。基本结构:
| 项目 | 内容 |
|---|---|
| 用例名称 | 例如“购买饮料”“结账” |
| 参与者 | 使用该用例的外部角色 |
| 主要事件流 | 正常情况下的步骤 |
| 备选事件流 | 条件不满足、异常、可选流程 |
用例规约不是散文,要把题干流程压缩成清晰步骤。条件句放到备选事件流中。
做题步骤
- 读问题,先知道要补用例名、扩展条件还是类名。
- 圈题干动词短语,作为用例候选。
- 圈条件句,判断是不是 extend 的触发条件。
- 圈名词,作为类名候选。
- 看类图关系,把父类、子类、整体、部分放到正确位置。
- 最后检查答案是否直接来自题干或由题干合理压缩。
例题
补用例图时,较稳妥的做法是:
“如果没有地址信息,则可以添加新地址”更适合建模为:
自查要点
- 用例名为什么通常从动词短语中提取?
- “包括 A、B、C”和“分为 A、B”为什么常对应泛化?
- extend 的扩展条件通常在题干哪里出现?
- 类图填空为什么要同时看名词和关系位置?