UML图——用例图详解

1,121 阅读5分钟

通过阅读本文章,你将知道:

  1. 什么是用例图?
  2. 用例图的目的是什么?
  3. 如何设计用例图?

概述

  1. 什么是用例图

用例图是参与者(用户或外部系统)与所考虑的系统之间交互的可视化表示。它从用户的角度描述系统的功能或行为。用例图捕获系统的功能需求,并帮助识别不同的参与者如何与系统交互以实现特定的目标或任务。

用例图提供了系统功能的高级概述,显示了它提供的不同特性或功能以及用户或外部系统如何与其交互。它们充当利益相关者之间的沟通工具,帮助澄清和验证需求、识别系统边界并支持开发和测试流程。

  1. 用例图的目的
  • 展示用户与系统交互的方式
  • 可视化系统架构
  • 验证与确认系统需求

用例图的组成

用例如由如下元素组成:

  • 参与者(Actor)
  • 用例(Use Case)
  • 系统(System)
  • 包(Package)

接下来分别介绍上面元素。

参与者(Actor)

用例图中的参与者是在给定系统中执行角色的任何实体。这可以是一个人、组织或外部系统。通常用如下符号表示:

image.png

用例(Use Case)

用例代表系统内的功能或操作。它被绘制为椭圆形并以函数命名。它通常使用如下符号表示:

image.png

系统(System)

系统用于定义用例的范围并绘制为矩形。这是一个可选元素,但在可视化大型系统时很有用。例如,您可以创建所有用例,然后使用系统对象来定义项目涵盖的范围。或者您甚至可以使用它来显示不同版本中涵盖的不同领域。

image.png

包(Package)

包也是一个可选元素,和面向对象编程中的“包”概念类似,它用于将一些用例分组在一起。它通常使用如下符号表示:

image.png

用例图中的关系

用例图中可以有 5 种关系类型:

  • 参与者和用例之间的关联关系
  • 参与者之间的泛化关系
  • 用例之间的扩展关系(<< extend >>)
  • 用例之间的包含关系(<< include >>)
  • 用例之间的泛化关系

参与者和用例之间的关联

参与者和用例之间的关联关系我们用实线表示,它其实强调的是一个参与者必须至少和一个用例关联,否则这个参与者不应该出现,不符合用例图的规范。

image.png

参与者之间的泛化

参与者(Actor)的泛化意味着一个参与者可以继承另一参与者的角色。当参与者A泛化于参与者B时,就表示参与者A继承了参与者B的所有用例。比如说普通员工和管理员之间的关系就是泛化关系,管理员可以拥有员工的所有操作行为(用例)。

例如下面:

image.png

用例之间的扩展关系

用例A扩展用例B,指的是在用例A的基础上添加用例B的基础上额外添加一些扩展行为。通常是可选的 它通过如下符号表示:

image.png

例如下面,我们对【存入资金】这个用例扩展了【计算资金】这个用例,并且只有存款超过 10,000 或年龄超过 55岁时才会触发该扩展用例。

image.png 在对一个用例进行扩展时我们通常会考虑如下事项:

  • 扩展用例取决于扩展(基本)用例。在下图中,如果没有“存款资金”用例,“计算奖金”用例就没有多大意义。
  • 扩展用例通常是可选的,并且可以有条件地触发。在图中,可以看到只有存款超过 10,000 或年龄超过 55岁时才会触发扩展用例。
  • 扩展(基本)用例本身必须有意义。这意味着它应该是独立的,并且不能依赖于扩展用例的行为。

以上三点是我们在设计扩展用例时通常需要考虑的。

用例之间的包含关系

用例A包含于用例B,指的是用例B的行为是用例A的一部分。它通常用如下符号表示

image.png 这样设计主要原因是在多个用例中用例B是通用操作,所以为了简化复杂的行为。把通用行为用例B抽取出来。

注意用例之间的包含关系和用例之间的扩展关系的区别:

包含用例B它是强制的,而不是可选的,没有包含用例B,基本用例A就不完整。而在上一节中,扩展用例B是可选的,而且通常是在某一条件触发时才存在。

image.png

用例之间的泛化关系

用例之间的泛化关关系和参与者之间的泛化关系一样,当用例A泛化于用例B时,用例A就继承了用例B的所有行为。使用如下符号表示:

image.png

例如下面的支付账单用例泛化于微信支付用例和支付宝用例: image.png

如何创建用例

在对一个系统设计用例时,我们一般遵循如下流程步骤:

  1. 找到系统中所有的参与者(Actor)
  2. 找到系统中所有的用例(Usee Case)
  3. 寻找系统中可重用的用例(用例之间的<< include >> )
  4. 开始完成不同参与者和用例之间的关联
  5. 开始对某个用例添加可选功能(用例之间的<< extend >>)
  6. 验证细化