需求与静态结构
从需求分析入手,掌握用例图、类图和包图的用途、组成元素与核心关系。
内容整理自 new_uml/UML.md。
二、软件开发步骤与需求分析
软件开发步骤:
需求分析
系统设计
原型设计
UI 设计
编码实现
测试
部署
维护
其中,需求分析是软件开发的第一步,也是最重要的一步。用例图通常用于需求分析阶段,用来帮助理解系统要完成什么功能。
三、用例图
1. 用例图的作用
用例图用于描述系统的功能需求,说明参与者通过系统可以完成哪些业务目标。
2. 用例图元素
参与者:可以是人、系统、子系统、类。
用例:软件使用者希望借助系统完成的愿望,或者系统需要完成的业务目标。
3. 用例图关系
用例之间的关系:
泛化关系
包含关系:
<<include>>扩展关系:
<<extend>>
参与者之间的关系:
- 泛化关系
参与者和用例之间:
- 关联关系
4. 关系理解
包含关系 include:一个用例必然包含另一个用例,是必须执行的公共功能。
扩展关系 extend:某些条件下才会发生,是可选功能。
泛化关系:类似继承,子用例或子参与者继承父用例或父参与者的特征。
关联关系:参与者和用例之间的普通联系。
四、类图
1. 如何描述一个类
一个类通常包括三部分:
类名
属性,也叫成员变量
方法,也叫成员函数、成员方法
属性和方法的可见性:
private:私有public:公有protected:受保护
2. 类之间的关系
类图中常见关系:
泛化,也就是继承
实现
关联
聚合
组合
依赖
3. 关联关系
关联关系是最弱、最普通、最粗浅的一种关系。
只要两个类之间有联系,就可以认为它们存在关联关系。
4. 聚合与组合
判断聚合和组合的核心方法:看整体消亡时,部分是否还能存在。
聚合关系:整体消亡,部分仍然可以存在。
例如:班级和学生,班级没了,学生还存在。组合关系:整体消亡,部分也随之消亡。
例如:人和心脏,人不存在了,心脏也失去意义。
5. 数量关系
类图中还可以添加数量关系,例如:
一对一
一对多
多对一
多对多
在 Rational Rose 中可以通过关系线的属性设置 Multiplicity。
五、包图
1. 包图的作用
在大型软件系统中,类和接口数量很多,关系复杂,因此引入“包”来组织和管理元素。
包的作用:
对元素进行分组,方便维护和管理。
包是版本控制和管理的基本单元。
在设计阶段,包是任务分配的基本单元。
在实现阶段,包是逻辑空间划分的基本单元,方便编程。
2. 包的例子
例如 Java 中:
package org.gdrw.entity;
package org.gdrw.service;在 Rational Rose 的类图工具栏中,可以使用 Package 创建包图。
课后题补充:UML 基础、用例图与类图
第二章:UML 基础
填空题答案
- UML 中常见的 5 种关系是关联、实现、泛化、依赖、聚合。组合通常视为关联的特殊形式。
- UML 的扩展机制是构造型、标记值、约束。
- UML 的公共机制是规格说明(详述)、修饰、通用划分、扩展机制。
选择题答案与辨析
- UML 事物包括结构事物、行为事物、分组事物和注释事物。课后题选项写“控制事物”,标准术语应记为行为事物。
- 在“依赖、泛化、关联、扩展、实现”的选项中,答案是实现;扩展是用例之间的关系。
- 不是静态视图的是用例图,因为用例图属于行为图。
第三章:用例图
简答题
- 用例图的主要元素:参与者、用例、系统边界、用例之间的包含/扩展/泛化关系,以及参与者与用例之间的关联关系。
- 参与者是否属于系统成员:不属于。参与者是系统外部与系统交互的实体,可以是用户或其他系统。
- 用例与场景:用例是一组相关场景的集合,场景是用例的一次具体执行实例。例如“登录 APP”包含登录成功、密码错误、账号未注册等场景。
- 用例之间的三种关系:包含、扩展、泛化。例如下单包含支付;点餐可扩展加购餐具;支付可泛化为微信支付和支付宝支付。
- 组织用例的过程:确定系统边界 → 识别参与者 → 识别用例 → 梳理用例关系 → 验证核心功能是否被覆盖。以图书馆系统为例,参与者包括读者、图书管理员和系统管理员,“借阅图书”可包含“验证读者身份”。
- 寻找参与者和用例:先问“谁或什么与系统交互”,再问“参与者需要系统提供什么功能”。外卖系统可识别点单用户、商家、骑手、平台管理员,以及浏览商家、下单支付、接收订单、出餐、接单、配送等用例。
填空题答案
- 用例图描述参与者、用例以及它们之间的关系。
- 用例图主要用于系统的功能建模。
- 参与者名称应表示角色,不能使用具体对象名。
- 场景是用例的一次完整执行实例。
- 用例之间的关系包括包含、扩展、泛化。
- 包含关系的构造型是
<<include>>,扩展关系的构造型是<<extend>>。 - 包含关系的箭头由基本用例指向被包含用例。
- 基本用例独立于扩展用例存在,满足条件时才调用扩展用例。
- 参与者与用例之间是双向关联关系,用实线表示通信。
第四章:类图
填空题答案
- 类之间的主要关系有关联、泛化、依赖、实现。
- 类用一个矩形表示,矩形由类名、属性、方法三部分构成。
- 可见性包括公有(+)、私有(-)、受保护(#)。
问答题
1. 用实际例子表示一个类,并说明三个组成部分。
+---------------------+
| Student | 类名
+---------------------+
| - studentId: String | 属性:私有
| + name: String | 属性:公有
| # age: int | 属性:受保护
+---------------------+
| + attendClass():void| 方法:公有
| - doHomework():void | 方法:私有
+---------------------+
- 类名:标识一类具有共同特征的实体。
- 属性:描述实体的静态特征。
- 方法:描述实体可以执行的动态行为。
2. 命名规则。类名使用大驼峰,如 Book、UserInfo;属性和方法使用小驼峰,如 bookName、borrowBook()。名称应见名知意,方法通常使用“动词 + 名词”。