对象图、类图、协作图:概念、区别和联系
在 UML(统一建模语言) 中,对象图、类图、协作图 都用于描述系统的结构和行为,但关注点不同:
- 类图(Class Diagram):描述系统的静态结构,定义类及其关系。
- 对象图(Object Diagram):展示运行时对象的实例状态,是类图的快照。
- 协作图(Collaboration Diagram,也称通信图):展示对象间的交互过程,描述消息如何在对象之间传递。
1. 类图(Class Diagram)
📌 定义
类图是 UML 中最核心的图,用于表示系统的静态结构,包含:
- 类(Class)
- 属性(Attributes)
- 方法(Methods)
- 类之间的关系(关联、继承、依赖、聚合、组合)
📌 适用场景
- 设计系统的整体架构。
- 定义对象的属性和方法。
- 生成数据库表结构(类可映射为数据库表)。
- 面向对象编程(OOP) 中,描述类的职责和行为。
📌 示例
+-------------------+
| User |
|-------------------|
| - id: int |
| - name: String |
|-------------------|
| + login() |
| + logout() |
+-------------------+
│
│ 继承(Generalization)
▼
+--------------------+
| Admin |
|--------------------|
| - adminLevel: int |
|--------------------|
| + manageUsers() |
+--------------------+
解释:
User
是基类,Admin
继承User
并扩展了manageUsers()
方法。- 这个类图展示了继承关系 和 类的静态结构。
2. 对象图(Object Diagram)
📌 定义
对象图是 类图的实例,描述系统在某个特定时刻的对象状态和关系。
📌 适用场景
- 调试运行时对象的状态。
- 模拟系统快照,查看数据如何存储。
- 验证类图的设计是否合理。
📌 示例
+-------------------+
| user1: User |
|-------------------|
| id = 101 |
| name = "Alice" |
+-------------------+
│
│ 关联(Association)
▼
+--------------------+
| admin1: Admin |
|--------------------|
| id = 102 |
| name = "Bob" |
| adminLevel = 5 |
+--------------------+
解释:
user1
和admin1
是User
和Admin
类的具体实例。id
和name
是它们的具体值,表示系统在某一时刻的状态。
📌 类图 vs 对象图
对比项 | 类图(Class Diagram) | 对象图(Object Diagram) |
---|---|---|
描述内容 | 类和它们的关系 | 类的实例和它们的状态 |
关注点 | 静态结构 | 运行时状态 |
主要元素 | 类、属性、方法、关系 | 对象、属性值、链接 |
用途 | 设计系统架构 | 调试系统状态 |
示例 | User 类 | user1: User |
3. 协作图(Collaboration Diagram / 通信图)
📌 定义
协作图属于 交互图的一种(另一种是序列图),用于表示对象之间的交互,描述它们如何协作完成任务。
主要元素:
- 对象(Object):交互的实例。
- 链接(Links):表示对象之间的关系。
- 消息(Messages):标注调用的顺序,如
1: login()
。
📌 适用场景
- 展示对象如何交互 以完成任务。
- 分析方法调用顺序 和 消息传递 。
- 面向对象设计 中,描述行为逻辑。
📌 示例
+-------------------+ +-------------------+
| user1: User | | authService: Auth |
|-------------------| |-------------------|
| + login() |----> | + verifyUser() |
+-------------------+ +-------------------+
1: login() 2: verifyUser()
解释:
user1
调用authService
的verifyUser()
方法,形成对象间的协作关系。1: login()
和2: verifyUser()
表示消息的执行顺序。
4. 区别与联系
🔹 区别
对比项 | 类图(Class Diagram) | 对象图(Object Diagram) | 协作图(Collaboration Diagram) |
---|---|---|---|
描述内容 | 系统的静态结构 | 系统某时刻的实例状态 | 对象交互过程 |
关注点 | 类及其关系 | 对象及其属性值 | 消息传递 & 交互 |
主要元素 | 类、属性、方法、关系 | 对象、属性值、链接 | 对象、链接、消息 |
用途 | 设计系统架构,定义类 | 运行时调试,系统状态建模 | 设计功能逻辑,分析对象协作 |
图示特点 | 抽象,不包含具体数据 | 实例化,展示具体对象 | 动态交互,包含消息编号 |
示例 | 设计 User 和 Admin 的类 | user1: User ,admin1: Admin | user1.login() -> authService.verifyUser() |
🔹 联系
1️⃣ 类图 定义了类和关系,是 蓝图。
2️⃣ 对象图 是类图的实例化,描述具体对象。
3️⃣ 协作图 描述对象如何交互,展示消息传递。
🚀 总结记忆:
- 类图 → 静态设计(定义类)
- 对象图 → 运行时快照(实例状态)
- 协作图 → 动态行为(交互过程)
在实际开发中,类图用于架构设计,对象图用于调试状态,协作图用于分析交互流程! 💡