顺序图 – 系统交互的“时间剧本” 🎬

233次阅读

一、顺序图是啥?—— 用例的“分镜脚本”📜

关键字:顺序图、时间顺序、对象交互、消息传递

🧠

用例描述了“谁做了什么”,但没说“怎么做”——顺序图就是用例的 “动态执行剧本”:它按 时间顺序 展示对象之间的消息传递过程,把用例的抽象步骤转化为“对象 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 向骑手系统发‘派单’消息,不用等骑手回复就先告诉用户‘订单已提交’”)。
// 对应顺序图中“用户→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”的逻辑。

☁️ 复杂场景:分布式系统的顺序图

对于微服务架构,顺序图可以展示“用户→网关→订单服务→支付服务→库存服务”的跨服务调用流程,帮助定位“哪个服务调用超时”等问题。

正文完
 0