一、顺序图是啥?—— 用例的“分镜脚本”📜
🧠
用例描述了“谁做了什么”,但没说“怎么做”——顺序图就是用例的 “动态执行剧本”:它按 时间顺序 展示对象之间的消息传递过程,把用例的抽象步骤转化为“对象 A→对象 B 发消息,对象 B→对象 C 发消息”的具体流程。
🤖 类比:
如果用例是“点外卖”的“用户下单→商家接单→骑手配送”流程,那顺序图就是这个流程的“分镜脚本”——能看到“用户(对象)→APP(对象)发‘提交订单’消息,APP→商家系统发‘新订单’消息”的每一步时间顺序。
✍️ 核心作用:
- 细化用例:把用例的自然语言转化为“对象 + 消息”的技术流程;
- 明确职责:展示每个对象在交互中承担的工作;
- 沟通开发:让程序员清楚“代码里对象之间怎么调用”。
二、顺序图的“零件”:对象 + 生命线 + 激活 + 消息 🧩
👆 1. 对象 & 生命线:交互的“演员”与“出场时间”
顺序图中的“对象”是参与交互的实体(比如“用户”“APP”“商家系统”),用“对象名: 类名”表示(如u:User)。
“生命线”是对象的“时间轴”——从对象底部向下延伸的虚线,表示对象从交互开始到结束的“存活时间”:
- 对象在交互开始前就存在:生命线从图顶端开始;
- 对象在交互中创建:生命线从“创建消息”处开始,用
<>标记; - 对象在交互中销毁:生命线用“X”标记结束,用
<>标记。
⚡ 2. 激活:对象的“工作状态”
激活(控制焦点)是生命线中的“矩形条”,表示对象“正在处理消息”的时间段——比如“APP 收到用户的‘提交订单’消息后,激活状态开始,直到 APP 向商家系统发送‘新订单’消息后,激活状态结束”。
💬 3. 消息:对象间的“对话内容”
消息是对象之间传递的“指令 / 数据”,用“带箭头的线”表示,常见类型:
- 调用消息(实心箭头):同步调用,发送者等待接收者执行完再继续(比如
u:User→app:App: submitOrder()); - 返回消息(虚线箭头):接收者执行完后给发送者的反馈(比如
app:App→u:User: orderResult()); - 异步消息(半实心箭头):发送者不等待,直接继续执行(比如“APP 向骑手系统发‘派单’消息,不用等骑手回复就先告诉用户‘订单已提交’”)。
User u = new User();
App app = new App();
OrderResult result = app.submitOrder(u.getOrderInfo()); // 调用消息
u.showResult(result); // 返回消息处理
三、顺序图的“剧情控制”:结构化片段 🎮
🎯
复杂交互会有“分支、循环”等逻辑,顺序图用“结构化片段”表示这些控制流,片段左上角的“关键字”表示逻辑类型:
- 可选片段(opt):“如果…就…”的单分支逻辑,比如“如果密码正确,就显示登录成功”;
- 条件片段(alt):“如果…否则…”的多分支逻辑,比如“如果订单金额 >100,免配送费;否则收 5 元配送费”;
- 循环片段(loop):“重复…直到…”的循环逻辑,比如“如果密码错误,重复提示用户输入,直到输入正确”;
- 并行片段(par):多个流程同时执行,比如“APP 同时向商家系统发‘新订单’消息、向支付系统发‘扣款’消息”。
✍️ 实战例子:用户登录的顺序图
循环片段(loop)包裹“输入账号密码→验证密码”的流程(密码错误则重复),可选片段(opt)包裹“密码正确→显示登录成功”的流程。
四、顺序图的建模步骤:写好“时间剧本”📋
📌 步骤:
- 确定交互场景:选要展示的用例(比如“用户登录”);
- 排列对象:按重要性排对象(重要对象放左边,比如“用户”放最左);
- 画生命线:标记对象的创建 / 销毁时机;
- 排消息顺序:从第一个消息开始,按时间顺序画消息(标注参数、返回值);
- 加结构化片段:补充分支、循环等逻辑;
- 设置激活期:标记对象处理消息的时间段。
⚠️ 注意:
不用给所有用例画顺序图——只给“流程复杂、消息多”的用例画,避免低效。
五、顺序图的“变体”:时间图 ⏱️
📊
时间图是顺序图的“时间量化版”——纵向是对象,横向是时间刻度,能显示对象的“状态变化”和“时间间隔”,适合实时系统(比如电子门禁、工业控制)。
✍️ 例子:电子门禁系统的时间图
能看到“读卡器(scanner)从 locked→waiting→open”的状态变化,以及“门打开 6 秒后自动锁闭”的时间间隔。
六、顺序图的实战价值:从需求到代码的“桥梁”🌉
🚀
在实际开发中,顺序图是“产品→开发”的沟通桥梁:产品经理用它确认用例的执行逻辑,开发者用它写代码的“对象调用关系”。比如“电商下单”的顺序图,直接对应代码中“OrderService 调用 PaymentService、InventoryService”的逻辑。
☁️ 复杂场景:分布式系统的顺序图
对于微服务架构,顺序图可以展示“用户→网关→订单服务→支付服务→库存服务”的跨服务调用流程,帮助定位“哪个服务调用超时”等问题。