UML建模 练习

UML建模 练习

#practice #uml #modeling

📌核心模式
关键词 答案
类图 描述类的结构、属性、方法及类之间的关系
对象图 描述某一时刻对象实例及其关系的快照
关联 类之间的结构关系,表示对象间的连接
序列图 描述对象之间消息传递的时间顺序

题目1 - [记忆] 类图的基本组成

UML类图由哪些基本元素组成?请分别说明每个元素的作用。

📌查看答案
UML类图的基本组成元素:
  1. 类名区域(顶部):显示类的名称,抽象类用斜体表示
  2. 属性区域(中部):列出类的属性,格式为 可见性 名称: 类型,例如 - balance: Decimal
  3. 方法区域(底部):列出类的操作/方法,格式为 可见性 方法名(参数): 返回类型
  4. 可见性符号
    • + 表示 public(公有)
    • - 表示 private(私有)
    • # 表示 protected(受保护)
  5. 关系线:类之间的关联、继承、依赖等关系

题目2 - [记忆] 类图与对象图的区别

请说明UML类图和对象图之间的三个主要区别。

📌查看答案
特性 类图 对象图
表示内容 类的定义(模板/蓝图) 类的实例(具体对象)
名称格式 仅类名,如 Customer 对象名:类名,如 john:Customer,或匿名 :Customer
属性值 仅显示属性名和类型,如 name: String 显示具体的属性值,如 name = "John"
下划线 无下划线 对象名和属性值都加下划线
用途 设计阶段的静态结构描述 描述系统在某一时刻的特定状态/快照

题目3 - [记忆] UML中的关联类型

请列举UML中类之间的四种主要关系类型,并简要说明每种关系的含义。

📌查看答案
  1. 关联(Association):表示两个类之间存在结构关系,对象之间互相知道对方。用实线表示,可标注多重性(如 1..*, 0..1)
  2. 聚合(Aggregation):一种特殊的关联,表示”整体-部分”关系,但部分可以独立于整体存在。用空心菱形表示
  3. 组合(Composition):更强的聚合关系,部分不能独立于整体存在,整体销毁时部分也被销毁。用实心菱形表示
  4. 依赖(Dependency):表示一个类的变化会影响另一个类,通常是临时性的使用关系。用虚线箭头表示

此外还有泛化(Generalization)/继承:子类继承父类,用空心三角箭头表示。


题目4 - [记忆] 序列图的组成元素

UML序列图由哪些基本元素组成?每个元素的作用是什么?

📌查看答案
序列图的基本组成元素:
  1. 参与者/角色(Actor):参与交互的对象或外部角色,放在图的顶部
  2. 生命线(Lifeline):从每个对象向下延伸的虚线,表示对象在时间轴上的存在周期
  3. 激活框(Activation Bar):生命线上的窄矩形,表示对象正在执行操作的时间段
  4. 消息(Message)
    • 同步消息(实心箭头 ):调用者等待返回
    • 异步消息(开放箭头 ):调用者不等待返回
    • 返回消息(虚线箭头 ):表示方法的返回值
  5. 时间轴:从上到下表示时间的先后顺序

题目5 - [记忆] 多重性的表示

在UML类图中,关联关系上的多重性(Multiplicity)有哪些常见的表示方式?请解释每种方式的含义。

📌查看答案
常见的多重性表示:
符号 含义 示例
1 恰好一个 一个订单必须有一个客户
0..1 零个或一个(可选) 一个员工可能没有或有一个经理
*0..* 零个或多个 一个客户可以有零个或多个订单
1..* 一个或多个(至少一个) 一个订单必须至少有一个订单项
n..m 从n到m个 一个团队有3到8个成员

多重性标注在关联线的两端,分别表示该端类的对象数量限制。


题目6 - [应用] 根据场景绘制类图关系

一个在线书店系统有以下需求:

  • 一个客户(Customer)可以下多个订单(Order)
  • 每个订单包含多个订单项(OrderItem)
  • 每个订单项对应一本书(Book)
  • 书属于一个类别(Category)

请描述这些类之间的UML关联关系,包括多重性。

📌查看答案
类之间的关联关系:
  1. Customer → Order

    • Customer 端:1(一个客户)
    • Order 端:0..*(零个或多个订单)
    • 关系:一个客户可以下零个或多个订单
  2. Order → OrderItem

    • Order 端:1(一个订单)
    • OrderItem 端:1..*(一个或多个订单项)
    • 关系:组合关系,订单项不能独立于订单存在
  3. OrderItem → Book

    • OrderItem 端:1..*(每个订单项对应一本书)
    • Book 端:1(一本书)
    • 关系:关联关系
  4. Book → Category

    • Book 端:*(多本书)
    • Category 端:1(属于一个类别)
    • 关系:关联关系,一本书属于一个类别

题目7 - [应用] 读取序列图场景

根据以下交互描述,判断在UML序列图中消息的顺序和类型:

  1. 用户(:User)调用系统(:System)的 login() 方法
  2. 系统调用数据库(:Database)的 authenticate() 方法并等待结果
  3. 数据库返回认证结果
  4. 认证成功后,系统调用会话管理器(:SessionManager)的 createSession() 方法
  5. 系统向用户返回登录结果

请画出消息的顺序并标注消息类型。

📌查看答案
序列图消息顺序(从上到下):
  1. :User → :Systemlogin()同步消息(实心箭头)
  2. :System → :Databaseauthenticate()同步消息(实心箭头)
  3. :Database → :System — 认证结果 — 返回消息(虚线箭头)
  4. :System → :SessionManagercreateSession()同步消息(实心箭头)
  5. :SessionManager → :System — 会话信息 — 返回消息(虚线箭头,隐含)
  6. :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.. 表示对象数量约束
图的选择 静态结构→类图,动态交互→序列图,实例验证→对象图