一、对象图是啥?—— 系统的“暂停键”功能 🎮
🧠
对象图就像给运行中的系统按了“暂停键”,拍下的一张“静态照片”——它展示的是 某一时刻 系统里的具体对象、对象的状态(比如“用户 LiLei 的账号”),以及对象之间的关系(比如“LiLei 和他订的机票”)。
🤖 类比:
如果把“类图”比作“电影剧本”(规定了角色和剧情框架),那“对象图”就是电影播放到某一分钟时的“帧画面”——能看到此刻每个角色(对象)的状态和位置。
✍️ 课本实例:
一场足球比赛的“类图”是“比赛规则 + 球员角色”,而“对象图”就是“比赛第 30 分钟时,每个球员的位置、跑动状态”的快照。
二、对象图的“零件”:对象 + 链 🧩
👆 1. 对象:类的“具体成品”
对象是类的 实例——类是“模板”(比如“学生类”),对象是用模板做出来的“具体物品”(比如“学生小明”“学生小红”)。
在 UML 中,对象用 带下划线的矩形 表示,格式是“对象名: 类名”,比如:
也可以省略对象名(匿名对象::Student)或类名(省略类名:stu)。
对象的“状态”是它的属性值(比如 stu 的name="小明"、studentID=1001),但对象图里 没有操作栏(操作是类统一定义的,所有对象共享)。
🔗 2. 链:对象间的“连接绳”
链是类图中“关联关系”的实例——类图里“Student 和 Class 关联”,对象图里就是“stu(Student 实例)和 G1_Class(Class 实例)用链连接”。
链用 实线 表示,作用是“导航”:一个对象可以通过链找到另一个对象(比如“小明通过链找到他所在的 G1 班”)。但链不显示“多重性”(实例间是“一对一”的具体连接,没有“数量范围”)。
三、画对象图的“拍照步骤”📷
画对象图就像“拍系统快照”,步骤如下:
1. 选“拍照场景”:确定要展示的功能
比如要展示“机票预订”的瞬间,先确定这个功能对应的“机制”(比如“用户选座→生成机票”)。
2. 挑“出镜对象”:从类图选参与的类
从类图里找出这个功能涉及的类(比如“User”“Ticket”“Flight”),然后创建它们的实例(比如user:User、ticket:Ticket)。
3. 填“对象状态”:补充属性值
给每个对象填当前时刻的属性值,比如:
ticket:Ticket {seatID=”13B”, price=1200}
4. 连“对象链条”:用链连接相关对象
把有联系的对象用实线连起来,比如“user”和“ticket”之间画链,表示“LiLei 订了 13B 的机票”。
四、对象图的“实战用法”:不止是拍照 🚀
✅ 用法 1:验证类图设计
如果类图设计有问题,画对象图时会发现逻辑矛盾——比如“机票类”没关联“航班类”,画对象图时就会发现“ticket”找不到对应的“flight”,从而修正类图。
🔍 用法 2:逆向工程(从运行系统拍快照)
对正在运行的系统“暂停”,导出当前对象的状态和关系,生成对象图——这在系统调试时很有用,能快速定位“某一时刻哪些对象出了问题”。
☁️ 复杂场景:多对象协作的快照
在大型系统中,对象图可以展示“多个对象协作完成复杂功能”的瞬间——比如电商系统的“下单支付”时刻,对象图会包含“用户、订单、支付、库存”等对象,以及它们的连接关系,帮助开发者理解系统的实际运行逻辑。
五、对象图的“拍照禁忌”❌
画对象图时要注意:
- 只拍“必要内容”:不要包含无关对象,聚焦当前场景;
- 不拍“动态消息”:对象图是静态快照,不展示对象间的消息传递(那是序列图的活儿);
- 别拍“过度细节”:只展示理解场景必需的属性值,避免冗余信息干扰阅读。