展开章节目录
理论 01

需求与静态结构

从需求分析入手,掌握用例图、类图和包图的用途、组成元素与核心关系。

内容整理自 new_uml/UML.md

二、软件开发步骤与需求分析

软件开发步骤:

  1. 需求分析

  2. 系统设计

  3. 原型设计

  4. UI 设计

  5. 编码实现

  6. 测试

  7. 部署

  8. 维护

其中,需求分析是软件开发的第一步,也是最重要的一步。用例图通常用于需求分析阶段,用来帮助理解系统要完成什么功能。


三、用例图

1. 用例图的作用

用例图用于描述系统的功能需求,说明参与者通过系统可以完成哪些业务目标。

2. 用例图元素

参与者:可以是人、系统、子系统、类。

用例:软件使用者希望借助系统完成的愿望,或者系统需要完成的业务目标。

3. 用例图关系

用例之间的关系:

  • 泛化关系

  • 包含关系:<<include>>

  • 扩展关系:<<extend>>

参与者之间的关系:

  • 泛化关系

参与者和用例之间:

  • 关联关系

4. 关系理解

包含关系 include:一个用例必然包含另一个用例,是必须执行的公共功能。

扩展关系 extend:某些条件下才会发生,是可选功能。

泛化关系:类似继承,子用例或子参与者继承父用例或父参与者的特征。

关联关系:参与者和用例之间的普通联系。


四、类图

1. 如何描述一个类

一个类通常包括三部分:

  • 类名

  • 属性,也叫成员变量

  • 方法,也叫成员函数、成员方法

属性和方法的可见性:

  • private:私有

  • public:公有

  • protected:受保护

2. 类之间的关系

类图中常见关系:

  • 泛化,也就是继承

  • 实现

  • 关联

  • 聚合

  • 组合

  • 依赖

3. 关联关系

关联关系是最弱、最普通、最粗浅的一种关系。
只要两个类之间有联系,就可以认为它们存在关联关系。

4. 聚合与组合

判断聚合和组合的核心方法:看整体消亡时,部分是否还能存在

  • 聚合关系:整体消亡,部分仍然可以存在。
    例如:班级和学生,班级没了,学生还存在。

  • 组合关系:整体消亡,部分也随之消亡。
    例如:人和心脏,人不存在了,心脏也失去意义。

5. 数量关系

类图中还可以添加数量关系,例如:

  • 一对一

  • 一对多

  • 多对一

  • 多对多

在 Rational Rose 中可以通过关系线的属性设置 Multiplicity。


五、包图

1. 包图的作用

在大型软件系统中,类和接口数量很多,关系复杂,因此引入“包”来组织和管理元素。

包的作用:

  1. 对元素进行分组,方便维护和管理。

  2. 包是版本控制和管理的基本单元。

  3. 在设计阶段,包是任务分配的基本单元。

  4. 在实现阶段,包是逻辑空间划分的基本单元,方便编程。

2. 包的例子

例如 Java 中:

package org.gdrw.entity;
package org.gdrw.service;

在 Rational Rose 的类图工具栏中,可以使用 Package 创建包图。



课后题补充:UML 基础、用例图与类图

第二章:UML 基础

填空题答案

  1. UML 中常见的 5 种关系是关联、实现、泛化、依赖、聚合。组合通常视为关联的特殊形式。
  2. UML 的扩展机制是构造型、标记值、约束
  3. UML 的公共机制是规格说明(详述)、修饰、通用划分、扩展机制

选择题答案与辨析

  1. UML 事物包括结构事物、行为事物、分组事物和注释事物。课后题选项写“控制事物”,标准术语应记为行为事物
  2. 在“依赖、泛化、关联、扩展、实现”的选项中,答案是实现;扩展是用例之间的关系。
  3. 不是静态视图的是用例图,因为用例图属于行为图。

第三章:用例图

简答题

  1. 用例图的主要元素:参与者、用例、系统边界、用例之间的包含/扩展/泛化关系,以及参与者与用例之间的关联关系。
  2. 参与者是否属于系统成员:不属于。参与者是系统外部与系统交互的实体,可以是用户或其他系统。
  3. 用例与场景:用例是一组相关场景的集合,场景是用例的一次具体执行实例。例如“登录 APP”包含登录成功、密码错误、账号未注册等场景。
  4. 用例之间的三种关系:包含、扩展、泛化。例如下单包含支付;点餐可扩展加购餐具;支付可泛化为微信支付和支付宝支付。
  5. 组织用例的过程:确定系统边界 → 识别参与者 → 识别用例 → 梳理用例关系 → 验证核心功能是否被覆盖。以图书馆系统为例,参与者包括读者、图书管理员和系统管理员,“借阅图书”可包含“验证读者身份”。
  6. 寻找参与者和用例:先问“谁或什么与系统交互”,再问“参与者需要系统提供什么功能”。外卖系统可识别点单用户、商家、骑手、平台管理员,以及浏览商家、下单支付、接收订单、出餐、接单、配送等用例。

填空题答案

  1. 用例图描述参与者、用例以及它们之间的关系。
  2. 用例图主要用于系统的功能建模
  3. 参与者名称应表示角色,不能使用具体对象名。
  4. 场景是用例的一次完整执行实例
  5. 用例之间的关系包括包含、扩展、泛化
  6. 包含关系的构造型是 <<include>>,扩展关系的构造型是 <<extend>>
  7. 包含关系的箭头由基本用例指向被包含用例
  8. 基本用例独立于扩展用例存在,满足条件时才调用扩展用例
  9. 参与者与用例之间是双向关联关系,用实线表示通信。

第四章:类图

填空题答案

  1. 类之间的主要关系有关联、泛化、依赖、实现
  2. 类用一个矩形表示,矩形由类名、属性、方法三部分构成。
  3. 可见性包括公有(+)、私有(-)、受保护(#)

问答题

1. 用实际例子表示一个类,并说明三个组成部分。

+---------------------+
|       Student       |  类名
+---------------------+
| - studentId: String |  属性:私有
| + name: String      |  属性:公有
| # age: int          |  属性:受保护
+---------------------+
| + attendClass():void|  方法:公有
| - doHomework():void |  方法:私有
+---------------------+
  • 类名:标识一类具有共同特征的实体。
  • 属性:描述实体的静态特征。
  • 方法:描述实体可以执行的动态行为。

2. 命名规则。类名使用大驼峰,如 BookUserInfo;属性和方法使用小驼峰,如 bookNameborrowBook()。名称应见名知意,方法通常使用“动词 + 名词”。