【面向对象】UML行为图:用例图(参与者/用例/关系)

考点频率 :★★★★★(下午题必考,选择题也常考)

难度 :⭐⭐⭐

建议 :重点区分 <<include>>(包含)和 <<extend>>(扩展)的关系,这是下午题补全用例关系的核心得分点

1️⃣ 用例图在画什么?

用例图(Use Case Diagram) 从用户视角 出发,描述"系统做什么 ",而不是"怎么做"。它回答的核心问题是:谁(参与者)能对系统做什么(用例)?

打个比方:你去餐厅吃饭,你不需要知道厨房里怎么切菜、怎么颠勺(那是实现细节)。你只需要知道服务员(系统边界)能帮你点单(用例)、上菜(用例)、结账(用例)。用例图就是这张"菜单",清晰地告诉所有食客(参与者),这家店(系统)提供哪些服务。

在软考下午题中,通常给你一段需求描述,要求你补全用例图中的参与者、用例名称,以及用例之间的包含/扩展关系。

2️⃣ 用例图的三大核心组件

组件 图形符号 含义 识别技巧
参与者(Actor) 火柴人 (或带 <<actor>> 的矩形) 与系统交互的外部实体,可以是人、外部系统或硬件设备 谁在用系统?(如:客户、管理员、银行系统)
用例(Use Case) 椭圆 系统为参与者提供的一个完整功能 系统能做什么?(如:登录、下单、支付)
系统边界(System Boundary) 矩形框 系统的范围,框内是用例,框外是参与者 矩形框顶部通常写系统名称(如"在线商城系统")

特别注意 :参与者不一定都是人 。外部系统(如支付宝支付接口)也可以是参与者。如果外部系统作为参与者,通常用矩形加 <<actor>> 标注,而不是火柴人。

3️⃣ 用例之间的关系(下午题核心考点)

这是软考考查的重中之重,尤其是包含 和扩展的辨析。

3.1 包含关系(Include)------ <<include>>

语义 :一个用例(基础用例)必然会执行 另一个用例(包含用例)的功能。缺少包含用例,基础用例就不完整。

  • 方向 :基础用例 指向 被包含用例(虚线箭头指向被包含者)。
  • 典型场景:公共的子功能、必须执行的步骤。
  • 示例 :下单 用例 <<include>> 支付 用例。下单时必须支付,不支付下单就不成立。

3.2 扩展关系(Extend)------ <<extend>>

语义 :一个用例(扩展用例)在特定条件下 ,可选地扩展另一个用例(基础用例)的行为。缺少扩展用例,基础用例仍然完整。

  • 方向 :扩展用例 指向 基础用例(虚线箭头指向被扩展者,和包含方向的指向相反)。
  • 典型场景:可选功能、异常处理、特定条件下的额外操作。
  • 示例 :下单 用例 <<extend>> 使用优惠券 用例。用户有优惠券时可以选,没有优惠券或者不想用,照样能下单。下单本身是完整的,优惠券是锦上添花。

3.3 泛化关系(Generalization)------ 实线空心三角箭头

语义:子用例(或子参与者)继承父用例(或父参与者)的行为和含义,并可扩展或覆盖。

  • 方向 :子用例 指向 父用例(与类的继承符号相同)。
  • 应用场景 :即可用于参与者之间 (如 VIP客户 继承 普通客户),也可用于用例之间 (如 扫码支付 继承 支付)。考试中,泛化关系在用例图中使用较少,多用于类图,了解即可。

4️⃣ <<include>> vs <<extend>>(死磕对比表)

这是整个用例图部分的"杀手题",务必刻进脑子里:

对比项 <<include>>(包含) <<extend>>(扩展)
执行条件 必然执行(必选项) 有条件触发(可选项)
基础用例完整性 缺少包含用例,基础用例不完整 缺少扩展用例,基础用例仍完整
箭头方向 基础用例 → 被包含用例 扩展用例 → 基础用例
典型对应 "要做A,必须先做B" "A做完后,如果条件满足,再做C"
软考关键词 "必须"、"总是"、"每次" "当...时"、"如果...则"、"可选的"

5️⃣ 经典例题

例题1(含/扩辨析):某系统的"借书"用例中,读者每次借书前系统必须验证该读者的会员资格是否有效。如果读者当天有逾期未还书籍,则系统提示"不可借书"。

A. 验证会员资格 与 借书 之间是包含关系

B. 验证会员资格 与 借书 之间是扩展关系

C. 提示不可借书 与 借书 之间是包含关系

D. 借书 与 验证会员资格 之间是扩展关系

解析:

  • "必须验证" → 包含 关系。基础用例 借书 指向被包含用例 验证会员资格。
  • "逾期时提示"是扩展关系。但看选项,A正确。选 A。

例题2(符号识别):在用例图中,表示扩展关系的符号是( )。

A. 虚线箭头 + <<include>>

B. 虚线箭头 + <<extend>>

C. 实线空心三角箭头

D. 实线箭头

解析 :A是包含,B是扩展,C是泛化,D是关联/通信。选 B。

6️⃣ 记忆口诀

用例三要素:参与者火柴人,椭圆功能在里面,边界框框围一圈。

包含是"必须",基础指包含,箭头指向被含者。

扩展是"可选",扩展指基础,触发条件才出现。

区分大招 :看到题干的 "必须/总是" → 选 包含 ;看到 "如果/当...时/可选" → 选 扩展。

7️⃣ 小测验(评论区对答案)

某在线考试系统的用例图中,"开始考试"用例执行前,系统必须验证考生的身份信息。身份验证通过后,考生才能开始作答。请问"身份验证"与"开始考试"之间应该使用( )关系?

A. <<extend>>

B. <<include>>

C. 泛化

D. 关联

🔔 本专栏日更,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容

#软考中级 #软件设计师 #用例图 #UML #包含 #扩展 #软考备考

相关推荐
有范先生12 分钟前
这次户外断粮危机后,我更在意主食能不能扛住极端环境了
笔记
喜欢打篮球的普通人1 小时前
MiniMind 学习笔记(十二):Pretrain 实操——从版本梳理到 8GB 显卡上的真实训练
人工智能·笔记·学习
坤坤子吖3 小时前
算法学习——高精度加减乘除
c++·笔记·学习·算法
Answer1st3 小时前
【HAL库】嵌入式思路(一)
笔记
AOI小白新手上路3 小时前
深度学习模块缝合方法论 · 人物蒸馏笔记
人工智能·笔记·深度学习
AOI小白新手上路4 小时前
韦东山 3-5 I.MX6ULL 的 LED 编程 · 学习笔记
arm开发·笔记·单片机·学习·架构·硬件架构
M78佐菲5 小时前
ARM学习笔记(9)
linux·arm开发·笔记·嵌入式硬件·学习
東隅已逝,桑榆非晚5 小时前
priority_queue的介绍和使用
c++·经验分享·笔记·学习
驭渊的小故事5 小时前
MyBatis 入门:从 JDBC 到优雅操作数据库(一)
笔记·sql·spring
zhangrelay7 小时前
机器人或计算机智能与时间相关案例汇总(ROS2-ROS1)
linux·笔记·学习·ubuntu·机器人