UML建模 练习
UML建模 练习
#practice #uml #modeling
Related Concepts
📌核心模式
| 关键词 | 答案 |
|---|---|
| 类图 | 描述类的结构、属性、方法及类之间的关系 |
| 对象图 | 描述某一时刻对象实例及其关系的快照 |
| 关联 | 类之间的结构关系,表示对象间的连接 |
| 序列图 | 描述对象之间消息传递的时间顺序 |
题目1 - [记忆] 类图的基本组成
UML类图由哪些基本元素组成?请分别说明每个元素的作用。
📌查看答案
UML类图的基本组成元素:
- 类名区域(顶部):显示类的名称,抽象类用斜体表示
- 属性区域(中部):列出类的属性,格式为
可见性 名称: 类型,例如- balance: Decimal - 方法区域(底部):列出类的操作/方法,格式为
可见性 方法名(参数): 返回类型 - 可见性符号:
+表示 public(公有)-表示 private(私有)#表示 protected(受保护)
- 关系线:类之间的关联、继承、依赖等关系
题目2 - [记忆] 类图与对象图的区别
请说明UML类图和对象图之间的三个主要区别。
📌查看答案
| 特性 | 类图 | 对象图 |
|---|---|---|
| 表示内容 | 类的定义(模板/蓝图) | 类的实例(具体对象) |
| 名称格式 | 仅类名,如 Customer |
对象名:类名,如 john:Customer,或匿名 :Customer |
| 属性值 | 仅显示属性名和类型,如 name: String |
显示具体的属性值,如 name = "John" |
| 下划线 | 无下划线 | 对象名和属性值都加下划线 |
| 用途 | 设计阶段的静态结构描述 | 描述系统在某一时刻的特定状态/快照 |
题目3 - [记忆] UML中的关联类型
请列举UML中类之间的四种主要关系类型,并简要说明每种关系的含义。
📌查看答案
- 关联(Association):表示两个类之间存在结构关系,对象之间互相知道对方。用实线表示,可标注多重性(如 1..*, 0..1)
- 聚合(Aggregation):一种特殊的关联,表示”整体-部分”关系,但部分可以独立于整体存在。用空心菱形表示
- 组合(Composition):更强的聚合关系,部分不能独立于整体存在,整体销毁时部分也被销毁。用实心菱形表示
- 依赖(Dependency):表示一个类的变化会影响另一个类,通常是临时性的使用关系。用虚线箭头表示
此外还有泛化(Generalization)/继承:子类继承父类,用空心三角箭头表示。
题目4 - [记忆] 序列图的组成元素
UML序列图由哪些基本元素组成?每个元素的作用是什么?
📌查看答案
序列图的基本组成元素:
- 参与者/角色(Actor):参与交互的对象或外部角色,放在图的顶部
- 生命线(Lifeline):从每个对象向下延伸的虚线,表示对象在时间轴上的存在周期
- 激活框(Activation Bar):生命线上的窄矩形,表示对象正在执行操作的时间段
- 消息(Message):
- 同步消息(实心箭头
→):调用者等待返回 - 异步消息(开放箭头
→):调用者不等待返回 - 返回消息(虚线箭头
←):表示方法的返回值
- 同步消息(实心箭头
- 时间轴:从上到下表示时间的先后顺序
题目5 - [记忆] 多重性的表示
在UML类图中,关联关系上的多重性(Multiplicity)有哪些常见的表示方式?请解释每种方式的含义。
📌查看答案
常见的多重性表示:
| 符号 | 含义 | 示例 |
|---|---|---|
1 |
恰好一个 | 一个订单必须有一个客户 |
0..1 |
零个或一个(可选) | 一个员工可能没有或有一个经理 |
* 或 0..* |
零个或多个 | 一个客户可以有零个或多个订单 |
1..* |
一个或多个(至少一个) | 一个订单必须至少有一个订单项 |
n..m |
从n到m个 | 一个团队有3到8个成员 |
多重性标注在关联线的两端,分别表示该端类的对象数量限制。
题目6 - [应用] 根据场景绘制类图关系
一个在线书店系统有以下需求:
- 一个客户(Customer)可以下多个订单(Order)
- 每个订单包含多个订单项(OrderItem)
- 每个订单项对应一本书(Book)
- 书属于一个类别(Category)
请描述这些类之间的UML关联关系,包括多重性。
📌查看答案
类之间的关联关系:
Customer → Order:
- Customer 端:
1(一个客户) - Order 端:
0..*(零个或多个订单) - 关系:一个客户可以下零个或多个订单
- Customer 端:
Order → OrderItem:
- Order 端:
1(一个订单) - OrderItem 端:
1..*(一个或多个订单项) - 关系:组合关系,订单项不能独立于订单存在
- Order 端:
OrderItem → Book:
- OrderItem 端:
1..*(每个订单项对应一本书) - Book 端:
1(一本书) - 关系:关联关系
- OrderItem 端:
Book → Category:
- Book 端:
*(多本书) - Category 端:
1(属于一个类别) - 关系:关联关系,一本书属于一个类别
- Book 端:
题目7 - [应用] 读取序列图场景
根据以下交互描述,判断在UML序列图中消息的顺序和类型:
- 用户(:User)调用系统(:System)的
login()方法- 系统调用数据库(:Database)的
authenticate()方法并等待结果- 数据库返回认证结果
- 认证成功后,系统调用会话管理器(:SessionManager)的
createSession()方法- 系统向用户返回登录结果
请画出消息的顺序并标注消息类型。
📌查看答案
序列图消息顺序(从上到下):
- :User → :System —
login()— 同步消息(实心箭头) - :System → :Database —
authenticate()— 同步消息(实心箭头) - :Database → :System — 认证结果 — 返回消息(虚线箭头)
- :System → :SessionManager —
createSession()— 同步消息(实心箭头) - :SessionManager → :System — 会话信息 — 返回消息(虚线箭头,隐含)
- :System → :User — 登录结果 — 返回消息(虚线箭头)
关键点:
- 步骤1-3是嵌套调用,系统在等待数据库返回后才继续执行
- 步骤4发生在步骤3返回之后,表示认证成功后的后续操作
- 所有消息都是同步的(调用者等待返回)
题目8 - [分析] 选择合适的UML图
在以下三个场景中,你应该选择哪种UML图?请分析理由。
场景A:向新开发人员解释系统中各业务对象的静态结构和关系
场景B:调试一个用户登录流程中对象之间的交互顺序问题
场景C:验证在特定测试用例下,对象的属性值是否正确
📌查看答案
场景A — 选择类图(Class Diagram)
- 理由:类图描述系统的静态结构,展示所有类、属性、方法以及类之间的关系(关联、继承等)
- 类图是新开发人员理解系统架构的起点,可以快速了解”系统中有哪些核心对象,它们如何关联”
- 这是面向对象设计中最基本、最常用的图
场景B — 选择序列图(Sequence Diagram)
- 理由:序列图专门描述对象之间的动态交互,按时间顺序展示消息传递
- 调试交互流程问题时,序列图可以清晰显示”谁在什么时候发送了什么消息,返回了什么”
- 可以直观地发现消息顺序错误、缺少消息或错误的调用关系
场景C — 选择对象图(Object Diagram)
- 理由:对象图展示类在特定时刻的实例快照,包含具体的属性值
- 验证特定测试场景下,可以确认”此时刻各对象的属性值是否为预期值”
- 对象图是类图的实例化,适合用于测试验证和文档示例
总结:静态结构用类图,动态交互用序列图,实例快照用对象图。
📌模式总结
| 关键词 | 答案 |
|---|---|
| 类图组成 | 类名 + 属性 + 方法 + 可见性 + 关系线 |
| 类图 vs 对象图 | 类图=模板定义,对象图=实例快照(有下划线和属性值) |
| 四种关系 | 关联、聚合(空心菱形)、组合(实心菱形)、依赖(虚线) |
| 序列图元素 | 生命线 + 激活框 + 同步/异步/返回消息 |
| 多重性 | 1, 0..1, , 1.. 表示对象数量约束 |
| 图的选择 | 静态结构→类图,动态交互→序列图,实例验证→对象图 |