什么是对象图?
一个对象图是一种结构化的UML 图它充当了应用程序状态的实时具体快照。与类图描绘系统抽象蓝图、数据类型和结构规则不同,对象图在特定时间点可视化一个实际运行的实例。它模拟实际对象的实例化,显示分配给其字段的确切值,并突出显示运行时这些实例之间存在的特定关联。
这种特定的UML 图类型对于调试复杂数据结构、解释高度嵌套的关系状态(如父子树图),或验证工程设计模式在特定边界情况变量下是否按预期行为,具有极高的价值。借助VPasCode,你可以干净地编写实时对象关系,完全绕过手动绘图工具。
核心语法指南:元素与构造
要在 PlantUML 中设计一个准确且符合标准的 UML 对象图,你需要理解对象实例化、字段值分配以及实例链接映射。
1. 实例化对象(名称与类类型)
对象使用object关键字进行声明。根据标准的 UML 建模约定,你通过提供其唯一的实例名称、一个冒号以及其父类蓝图类型来定义一个对象:
object "currentUser : Account" as activeUser ![]()
专业提示:始终使用as关键字将长的实例名称声明映射为简短的内部简写 ID(如activeUser),以便快速且清晰地绘制关联线。
2. 分配字段状态和运行时值
为了用测试数据值填充你的对象,请使用尾随的大括号打开一个主体块,并在单独的行上编写你的数据键值分配。与类定义不同,这里不要附加数据类型——应使用实际的运行时值:
object "adminCart : ShoppingCart" as cart1 {
cartId = "CART-9081"
itemCount = 3
isTaxExempt = false
} 
3. 映射实例关联
对象图中具体实例之间的连接代表现实世界中的内存指针,而非抽象的结构模式。您可以通过实心双破折号(”--)来映射这些链接。您还可以附加字符串标签以表示链接的功能上下文:

实用对象图的最佳实践
- 关注重点: 不要列出类定义中的每一个字段。仅包含直接解释您试图说明的特定运行时状态或错误的关键变量值。
- 保持链接中立: 避免在对象图中使用继承三角形或严格的组合菱形。使用简单、扁平的关系线(
--)或基本箭头尖(-->)来表示引用。 - 水平对齐迭代: 如果您正在映射数组列表或一系列历史对象,请使用水平导航箭头,如
-right->以强制实例在单行中清晰渲染。
现实世界中的PlantUML对象图示例
示例1:身份令牌会话状态(具体值映射)
此模板映射了一个实时的安全授权状态,展示了单个已认证用户如何链接到多个具有不同数据变量的特定活跃机器会话实例。
@startuml
object "targetUser : UserAccount" as user {
userId = 1042
username = "dev_admin"
status = "ACTIVE"
}
object "sessionMobile : UserSession" as session1 {
sessionId = "SESS-AAA-99"
deviceOS = "iOS 17"
ipAddress = "192.168.1.54"
}
object "sessionDesktop : UserSession" as session2 {
sessionId = "SESS-BBB-11"
deviceOS = "macOS 14"
ipAddress = "72.44.12.102"
}
' 建立运行时关联
user -- session1 : "已认证"
user -- session2 : "已认证"
@enduml 
语法分解: 此布局捕捉了生产代码中的一个明确场景:一个特定的用户记录(ID 1042)同时驱动两个完全独立的运行时会话实例。每个会话容器都跟踪其自身隔离的元数据布局参数。
示例 2:电子商务发票履行状态(多实体映射)
此高级系统蓝图映射了一个已完成的金融交易图。它精确地展示了订单记录、交易日志和仓库包裹在特定时间点之间的相互关系。
@startuml
object "buyerProfile : Customer" as customer {
email = "[email protected]"
tier = "VIP"
}
object "activeOrder : Order" as order {
orderNumber = "#99122"
subtotal = 149.99
currency = "USD"
}
object "stripeTransaction : LedgerEntry" as ledger {
referenceId = "ch_3Mv8x"
gatewayStatus = "SUCCESS"
settledAt = "2026-05-26"
}
object "packageA : Shipment" as ship1 {
trackingCode = "1Z999AA1"
carrier = "UPS"
weightKg = 1.4
}
object "packageB : Shipment" as ship2 {
trackingCode = "1Z999AA2"
carrier = "UPS"
weightKg = 0.8
}
' 结构性执行关联
customer -- order : "已提交"
order -- ledger : "由...资助"
order -- ship1 : "通过...履行"
order -- ship2 : "通过...履行"
@enduml 
语法分解: 此模板提供了对复杂系统状态的高度结构化概览。它展示了单个订单与一次成功的结账交易日志相关联,并拆分为两个独立的物理发货文件。这种详细程度使其成为审计数据结构和系统流程的绝佳蓝图。