很多人第一次接触 UML 对象图时,会把它理解成“带了具体名称的类图”。这种理解不算错,但还不够。对象图真正有用的地方,在于它能把系统在某个时间点的对象状态、对象之间的连接关系,以及当时已经确定的属性值直接展示出来。
如果你想判断一个场景该用类图还是对象图,或者不知道对象图到底该画哪些实例、哪些值、哪些链接,下面可以按“概念 - 目的 - 画法 - 示例 - 使用场景”的顺序来看,比较容易建立清晰判断。
什么是 UML 对象图
UML 对象图和类图一样,都用于反映系统的静态视图,但表达角度不同。类图描述的是抽象结构,是系统蓝图;对象图描述的则是实际或原型化场景中的具体实例。

换句话说,对象图展示的是某一时刻对象与对象之间的关系。它可以被看作类图的一个特殊用例:类图中定义了类、属性和关联,而对象图把这些抽象元素替换成具体对象和实际取值。
对象图与类图在表示法上几乎一致,但对象图有一个非常关键的限制:它只在某个时间段内成立。因为对象有生命周期,时间一变,实例状态和对象之间的关系也可能随之变化。
对象图和类图的区别
类图描述抽象模型,关注类及类之间的关系。
对象图描述具体实例,关注某个时刻真实存在的对象、链接和属性值。
类图数量通常有限,因为它是对系统结构的抽象总结。
对象图实例理论上可以有无限多个,因为不同时间、不同业务情境都可能形成不同快照。
也正因为如此,对系统行为真正有解释力的,往往是这些具体实例,而不是只停留在抽象层面的定义。
对象图的目的是什么
对象图的目的和类图有相似之处,但更贴近系统实际运行时的表现。它不是为了给出一个抽象蓝图,而是为了在特定时刻捕捉系统的静态视图。
从建模用途看,对象图主要可以帮助完成以下几件事:
用于正向工程和逆向工程。
展示系统中对象与对象之间的关系。
提供交互过程中的静态视图。
从实用角度理解对象行为及其相互关系。
如果类图回答的是“系统里允许有哪些类型,以及它们怎样关联”,那么对象图回答的就是“在这一刻,系统里到底有哪些对象,它们当前是怎样连接起来的”。
如何绘制 UML 对象图
因为对象图本质上是类图的实例,所以它使用的基本元素与类图相同,只是表达形式从抽象蓝图变成了具体对象。

画对象图时,重点不在于“把所有对象都画出来”,而在于选择对当前功能或分析目标真正重要的实例。单一对象图无法覆盖系统的全部情况,因此建模时通常要做筛选。
绘制思路可以按这三步走
先分析系统,找出哪些场景包含关键数据和关键关联。
只保留那些足以覆盖当前功能的实例。
对实例数量做控制和优化,因为对象实例理论上是无限的。
开始绘制前要先明确的元素
对象图的核心内容是对象。
对象之间通过链接连接。
对象和链接,是构成对象图的两个基本要素。
下笔前建议检查这些点
对象图名称要有意义,能够直接说明它的用途。
先确定最重要的对象,不必一开始就追求完整。
对象之间的关联要表达清楚。
需要捕捉不同对象在该时刻的具体值。
必要时补充注释,帮助读者理解场景边界。
订单管理系统对象图示例怎么理解
原文给出的示例来自订单管理系统。这里的重点,不是类层面的“顾客、订单、特殊订单、一般订单”这些定义本身,而是某一次具体购买场景里,系统中已经存在的对象实例以及它们的取值。

这个特定时刻包含以下对象:
顾客
订单
特殊订单
一般订单
在该场景中,当前顾客对象 C 对应三个订单对象 O1、O2、O3;与这些订单对象关联的,还有特殊订单对象 S1、S2 和普通订单对象 N1。
在这个时间点,顾客名下三笔订单的数值分别是 12、32 和 40。同时,特殊订单和一般订单对象也记录了各自实例在该时刻对应的值,分别是 20、30 和 60。
这里最关键的理解是:这些数字并不是系统永久不变的定义,而是对象图在该时刻捕捉到的实例值。如果换一个购买时间,再次绘制对象图,那么对象之间的关系可能不变,但属性值和实例组合都可能发生变化。
这也说明了对象图的本质:它不是描述“通常会怎样”,而是描述“此时此刻实际是怎样”。
对象图适合用在哪些场景
可以把对象图理解为运行中系统在某一刻的快照。原文用“列车运行”举了一个很直观的例子:同一列车在不同时间点,乘客数量、运行状态都可能不同;如果你在某一刻截取它的状态,这就是一个对象图式的观察方式。
因此,对象图特别适合以下场景:
为系统建立原型。
进行逆向工程分析。
描述复杂数据结构。
从实际运行角度理解系统。
捕捉实例和链接关系。
详细描述瞬态视图,也就是某一时刻的系统状态。
如果你的目标是解释“系统结构是什么”,优先考虑类图;如果你的目标是解释“这个场景发生时,系统里有哪些对象、它们当前是什么状态”,对象图会更直接。
怎么快速判断该不该用对象图
最后可以用一个简单标准来判断:
当你需要抽象定义系统结构时,用类图。
当你需要展示某个业务场景在某一时刻的真实实例状态时,用对象图。
对象图的价值,不在于画得多,而在于画得准。只要对象、链接和当时的关键值选得准确,它就能把很多抽象设计里看不清的问题,直接变成一个可观察、可讨论的系统快照。









