UML对象图
一、对象图核心概念
对象图(Object Diagram)描述的是系统在某一时刻对象(实例)的状态快照。它关注的是实际对象之间的实例关系,而不是类与类之间的静态结构。主要特点有:
-
对象(Object)
对象图显示的是类的对象(类的实例化实体)的具体状态,包括对象名、所属类以及部分属性值。从而可以直观看到系统在运行时各种对象之间的关系。
-
瞬时快照
对象图像是一张"照片",展示了在某一具体时刻各对象如何交互、彼此关联,适用于分析系统运行中的状态和数据实例。
-
关系展示(Link)
对象之间可能有连接(例如关联、依赖等关系),这些连接反映了各种对象实例之间的协作或数据传递过程。
通俗理解 :
想象你在开学第一天拍了一张班级合照,对象图就像这张照片,它显示了班级中每个同学(对象)的身份(所属类)、姓名(对象名称)和部分特征(属性值),以及大家站在一起的相互关系(关联)。这和 UML 的类图不同,类图描述的是同学们应具备的通用属性和方法,而对象图则展示了实际那一刻各个同学的样子和关系。
二、示例
我们以电商订单为例,展示一个简单对象图的快照。在此示例中,我们假设系统中已经存在以下实例对象:
- 一个用户对象(
u1 : User
,姓名为 Alice) - 一个订单对象(
o1 : Order
,总额 100) - 一个支付对象(
p1 : Payment
,状态为 completed)
下面利用节点标签描述对象名称、所属类和属性值,以展示对象之间的关系:
下单 支付 u1 : User
name = Alice o1 : Order
total = 100 p1 : Payment
status = Completed
说明:
- 箭头表示对象之间的交互:如用户
u1
(Alice)下单生成订单o1
,订单o1
调用了支付p1
。
三、设计题目
下面给出三个难度层级的设计题目,要求你针对对象图的视角绘制系统在某一时刻的状态快照:
1. Easy 难度:图书馆管理系统对象图
需求描述 :
设计一个图书馆系统的对象图。假设系统中存在以下实例:
- 一个读者 对象(例如,
r1 : Reader
,姓名为 Bob) - 一本图书 对象(例如,
b1 : Book
,标题为 "UML基础") - 一本借阅记录 对象(例如,
lr1 : LoanRecord
,记录借出日期和到期日期)
要求:
- 读者对象与借阅记录对象之间存在关联(表示该读者借阅了这本书);
- 借阅记录对象关联图书对象。
- 用 Mermaid 语法绘制该对象图,并标明对象间的关系。
2. Medium 难度:电商订单流程对象图
需求描述 :
设计一个网购订单系统的对象图快照。系统当前有:
- 一个用户 对象(例如,
u1 : User
,姓名为 Carol) - 一个购物车 对象(例如,
cart1 : ShoppingCart
),其中包含多个商品; - 一个订单 对象(例如,
o1 : Order
,订单总额 250); - 一个支付 对象(例如,
p1 : Payment
,支付状态为 pending)
要求:
- 用户对象通过购物车提交订单;
- 订单对象与支付对象存在关联。
- 用 Mermaid 语法绘制对象图,展示各对象的属性和相互关联。
3. Hard 难度:实时协作平台对象图
需求描述 :
设计一个用于支持在线多人编辑平台的对象图,展示系统在某一时刻的内部状态快照。系统包含以下实例:
- 一个用户 对象(例如,
u1 : User
,姓名为 David),以及多个在线用户对象; - 一个文档 对象(例如,
d1 : Document
,版本号 5.2); - 一个协作会话 对象(例如,
s1 : Session
,状态为 Active),记录当前协作会话信息; - 一个消息对象 (例如,
m1 : Message
,内容为"编辑保存成功")
要求:
- 用户对象与协作会话对象之间有关联(表示用户正在参与协作);
- 协作会话对象与文档对象之间有关联;
- 消息对象与协作会话对象有关联,表示通过该会话发送编辑消息。
- 使用 Mermaid 语法绘制对象图,注意对象的名称、所属类以及部分关键属性,并清楚标明各对象之间的关系。
三、设计题目参考答案
1. Easy 难度:图书馆管理系统对象图
下面对象图示例,满足图书馆管理系统的需求。
借阅 关联图书 r1 : Reader
name = Bob lr1 : LoanRecord
borrowDate = 2023-08-15
dueDate = 2023-09-15 b1 : Book
title = UML基础
说明:
- r1 表示读者对象,属性
name = Bob
。 - lr1 表示借阅记录对象,包含借出日期和到期日期(此处示例日期为 2023-08-15 和 2023-09-15,可根据需要修改)。
- b1 表示图书对象,属性
title = UML基础
。 - 箭头显示了对象之间的关联关系,表示读者借阅了图书,具体记录在借阅记录中。
2. Medium 难度:电商订单流程对象图
下面展示电商订单流程对象图的快照。
通过购物车提交订单 生成订单 关联支付信息 u1 : User
name = Carol cart1 : ShoppingCart
items = [item1, item2, ...] o1 : Order
total = 250 p1 : Payment
status = pending
说明
- u1 : User 对象表示用户,其姓名为 Carol。
- cart1 : ShoppingCart 对象表示购物车,其中包含多个商品(这里用
[item1, item2, ...]
作为示例数据)。 - o1 : Order 对象表示订单,其订单总额为 250。
- p1 : Payment 对象表示支付,其状态为 pending(待支付)。
- 箭头显示对象间的关系:
- 用户通过购物车提交订单;
- 购物车生成订单;
- 订单与支付对象建立关联。
3. Hard 难度:实时协作平台对象图
下面展示在线多人编辑平台在某一时刻的内部状态快照。该图除了包含一个示例用户 u1 : User
(David)外,还增加了多个在线用户对象,清晰展示了对象间的关联关系:
参与协作 参与协作 参与协作 关联文档 通过会话发送 u1 : User
name = David u2 : User
name = Alice u3 : User
name = Bob d1 : Document
version = 5.2 s1 : Session
status = Active m1 : Message
content = 编辑保存成功
说明
-
用户对象
u1
表示用户 David,u2
表示在线用户 Alice,u3
表示在线用户 Bob。
他们都通过箭头表示正在参与相同的协作会话s1
。
-
文档对象
d1
- 表示当前编辑的文档,版本号为 5.2。
-
协作会话对象
s1
- 状态为 Active,记录当前正在进行的团队协作信息,并与文档
d1
关联,反映该会话对应于哪个文档。
- 状态为 Active,记录当前正在进行的团队协作信息,并与文档
-
消息对象
m1
- 内容为 "编辑保存成功",通过箭头与协作会话
s1
关联,表示相关编辑消息通过该会话被发送出去。
- 内容为 "编辑保存成功",通过箭头与协作会话
小结
对象图提供了系统在某一具体时刻的状态快照,有助于了解实际对象的属性和它们之间的联系。