本教程对UML进行了深入比较对象图和类图重点探讨对象图如何在运行时捕捉系统状态,与类图提供的静态结构进行对比。内容包括详细解释和多个示例,帮助读者理解两种图的类型及其实际应用。
1. UML图简介
统一建模语言(UML)是一种标准化的可视化系统设计和行为的方法。在其各类图中,类图和对象图对于建模面向对象系统至关重要,但它们的作用各不相同:
- 类图描述系统的静态结构,定义类、属性、方法及其关系。
- 对象图捕捉系统在运行时特定时刻的动态状态,展示实例化对象及其关系。
本教程通过实际示例探讨了对象图如何反映运行时状态,与类图所呈现的永恒、结构化视角进行对比。
2. 类图:静态蓝图
目的与结构
类图是面向对象设计的基石,提供系统的静态视图,定义系统架构。它们定义:
- 类:对象的模板,指定属性(数据)和方法(行为)。
- 关系:类之间的关联、聚合、组合、泛化和依赖关系。
- 约束:规范或控制系统结构的规则或条件。
类图是永恒的,意味着它们在不参考执行特定时刻的情况下表示系统的结构。它们用于系统设计、实施规划和代码生成阶段。
关键元素
- 类:以一个包含三个部分(名称、属性、方法)的矩形表示。
- 属性:类的属性或数据字段(例如,name: String)。
- 方法:类可以执行的操作或行为(例如,calculateTotal(): double)。
- 关系:
- 关联:类之间的通用连接(实线)。
- 聚合:一种“拥有-有”关系(空菱形)。
- 组合:一种更强的“拥有-有”关系(实心菱形)。
- 泛化:继承或“是-有”关系(带空三角箭头的箭头)。
- 依赖:一种较弱的关系,其中一个类依赖于另一个类(虚线)。
示例场景
类图非常适合用于:
- 设计软件系统的架构。
- 向开发人员或利益相关者传达系统结构。
- 在面向对象编程中生成代码框架。
3. 对象图:运行时快照
目的与结构
对象图提供一个系统在运行时特定时刻的快照,显示实例化对象、它们的属性值以及它们之间的关系(链接)。它们是动态的,捕捉特定场景或用例中系统状态。
对象图源自类图,因为对象是类的实例,而链接是类图中定义的关联的实例。
关键元素
- 对象:以矩形表示,格式为ObjectName: ClassName,显示特定的属性值。
- 链接:对象之间的连接,表示类图中关联的实例。
- 属性值:对象在特定时间的属性的具体值(例如,price = 99.99)。
- 多重性:表示关系中涉及多少个对象(例如,一对一、一对多)。
示例场景
对象图适用于:
- 可视化特定用例或测试场景中对象的状态。
- 用于调试,以理解运行时对象之间的交互。
- 根据需求验证系统行为。
4. 对象图与类图之间的关键区别
| 方面 |
类图 |
对象图 |
| 目的 |
定义类的静态结构和关系。 |
展示运行时对象及其关系的快照。 |
| 重点 |
抽象类及其潜在关系。 |
具体实例(对象)及其当前状态。 |
| 时间视角 |
永恒的,代表系统的架构。 |
时间性的,捕捉执行过程中的某一特定时刻。 |
| 内容 |
属性、方法和关系(关联、泛化)。 |
具有特定属性值和链接的对象。 |
| 用例 |
系统设计、架构、代码生成。 |
调试、场景验证、运行时状态分析。 |
| 示例 |
一个具有 model 等属性和 drive() 等方法的 Car 类。 |
一个 myCar: Car 对象,其 model = “Toyota”,并链接到一个 myEngine: Engine 对象。 |
5. 实际示例
以下是三个详细示例,用于比较不同系统的类图与对象图。
示例 1:在线购物系统
场景
一个在线购物系统包含客户、订单和商品。类图定义了结构,而对象图展示了客户在结账时的订单。
类图
说明:类图定义了:
- Customer 类具有属性和一个用于下单的方法。
- Order 类具有属性和一个用于计算总价的方法。
- Product 类具有属性和一个获取价格的方法。
- 关系:一个客户可以下多个订单(一对多),而一个订单包含多个商品(一对多)。
对象图
说明:对象图展示了:
- 一个具体的客户(john: Customer),具有具体的属性值。
- 约翰下的一笔特定订单(order123:订单),总计149.98美元。
- 订单中包含两种产品(笔记本电脑和鼠标),并带有各自的具体价格。
- 显示运行时关系的链接(例如,约翰下了order123订单,该订单包含笔记本电脑和鼠标)。
示例2:图书馆管理系统
场景
图书馆系统管理书籍、会员和借阅。类图描述了结构,而对象图展示了会员借书的情况。
类图
说明:类图定义了:
- 会员,具有属性和借书的方法。
- 书籍,具有属性和检查可用性的方法。
- 借阅,具有属性和延长借阅期的方法。
- 关系:一个会员可以有多个借阅记录,一本书可以在多个借阅记录中被借出。
对象图
说明:对象图展示了:
- 一个具体的会员(alice:会员),具有具体的属性值。
- 一个具体的借阅记录(loan001:借阅),包含借出和归还日期。
- 一本爱丽丝借阅的具体书籍(book1:书籍)。
- 显示运行时状态的链接(例如,爱丽丝通过loan001借阅了book1)。
示例3:汽车经销商系统
场景
汽车经销商系统管理汽车、发动机和车轮。类图定义了结构,而对象图展示了某辆具体汽车的配置。
类图

说明:类图定义了:
- 汽车,具有属性和启动发动机的方法。
- 发动机,具有属性和点火的方法。
- 车轮,具有属性和旋转的方法。
- 关系:一辆汽车包含一个发动机(组合)和四个车轮(组合)。
对象图
说明:对象图显示:
- 一辆特定的汽车(myCar: Car),型号为“丰田凯美瑞”,年份为2023年。
- 一台特定的V6类型发动机(engine1: Engine)。
- 四个特定的轮子(wheel1 到 wheel4),尺寸为17。
- 显示运行时组合关系的链接(例如,myCar 包含 engine1 和四个轮子)。
6. 每种图的使用时机
在以下情况使用类图:
- 设计系统的架构或结构。
- 向开发人员或利益相关者传达系统的蓝图。
- 生成代码框架或数据库模式。
- 为对象定义可重用的模板。
在以下情况使用对象图:
- 调试时理解运行时的对象状态和交互。
- 验证特定场景或用例(例如,测试结账流程)。
- 说明对象在特定情境下的协作方式。
- 向非技术利益相关者讲解或解释运行时行为。
7. 总结
- 类图提供一种静态、抽象视图,定义类、其属性、方法和关系。它们对于系统设计和规划至关重要。
- 对象图捕捉系统在运行时的动态、具体快照,展示特定对象、其属性值和链接。它们非常适合用于调试和场景验证。
- 两者相辅相成:类图奠定基础,而对象图展示该基础在实际中的表现。
通过使用在线购物系统、图书馆管理系统和汽车经销商系统等示例,本教程展示了如何使用UML来建模系统的结构和运行时状态。
8. 参考资料
本教程提供了全面的指南,帮助您理解和应用类图与对象图。通过掌握这两种图表类型,您可以有效地设计、分析和调试面向对象系统。