时序图(sequence chart)

时序图是一种强调消息时间顺序的交互图,用于描述对象间交互和用例行为顺序。它展示了系统中类之间的交互,以及消息交换,其中消息可代表操作或触发状态变化。时序图的垂直轴表示时间顺序,水平轴表示对象实例,通过生命线、控制焦点和不同类型的同步、异步消息来描绘交互过程。时序图常用于描述用例、寻找类的操作,并包含角色、对象、生命线、控制焦点和消息等元素,可用于表示抉择、选项、循环、并行和中断等组合片段。

定义:描述了对象之间以及对象与参与者实例之间传递消息的时间顺序,用来表示用例中的行为顺序,是强调消息时间顺序的交互图
时序图描述的事物
时序图描述系统中类与类之间的交互,将这些交互建模成消息交换,时序图描述了类以及类之间的交换以完成的期望行为的消息,时序图中每条消息都代表了类的一个操作或者引起状态机改变的触发事件;
时序图表示
参与交互的对象在时序图顶端水平排列,每个对象的底端绘制了一条垂直虚线,对象A与对象B发送消息,用一条带箭头的实线表示,该实线起始于对象A底部的虚线,终止于对象B底部的虚线,实线箭头水平放置,越靠近顶端越早被发送
时序图的轨迹
时序图提供了随时间推移的,清晰的可视化的轨迹;
时序图的作用
1、用对象间的交互来描述用例
2、寻找类的操作
时序图的两个维度
1、垂直维度以发生的时间顺序显示消息/调用的序列
2、水平维度显示消息被发送到的对象实例
时序图的阅读顺序
时序图中,消息的阅读顺序是严格的自上而下
时序图的元素:角色,对象,生命线,控制焦点和消息
1、角色
系统角色、可以是人或者其他系统,子系统
2、对象
对象代表时序图中的对象在交互中所扮演的角色,位于时序图顶部和对象代表
对象一般包含一下三种命名方式:
第一种方式包含对象和类名
第二种方式只显示类名不显示对象名,即为一个匿名对象
第三种方式只显示对象名不显示类名
3、生命线
生命线代表时序图中的对象在一段时期内的存在,时序图中每个对象和底部中心都有一条垂直的虚线,这就是对象的生命线,对象间的消息存在于两条虚线间;
4、控制焦点
控制焦点代表时序图中的对象执行一项操作的时期,在时序图中每条生命线上的窄的矩形代表活动期。
5、消息
消息是定义交互和协作中交换信息的类,用于实体间的通信内容建模,消息用于在实体间传递信息,允许实体请求其他的服务,类角色通过发送和接受消息进行通信。
消息一般分为同步消息,异步消息,返回信息

1、同步消息=调用消息
消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接受者放弃或者返回控制,用来表示同步的意义;
2、异步消息
消息的发送者把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制,异步消息的接受者和发送者是并发工作的;
3、返回消息
返回消息表示从过程调用返回
常用组合片段举例:
1、抉择(Alt)
抉择在任何场合下只发生一个序列。可以在每一个片段中设置一个临界来指示该片段可以运行的条件,else的临界指示其他任何临界都不为true时应运行的片段,如果所有临界都为False并且没有else,则不执行任何片段;

2、选项(Opt)
包含一个可能发生或不发生的序列

3、循环(Loop)
片段重复一定的次数,可以在临界中指示片段重复的条件

4、并行(Par)

5、中断(Break)
如果执行此片段,则放弃序列的其余部分,可以使用临界来指示发生中断的条件

### 使用JavaScript或相关库在前端绘制时序图 在前端开发中,绘制时序图可以通过多种方式实现。以下是一些常见的方法和工具,结合提供的引用内容进行详细说明。 #### 1. 使用JS Sequence Diagrams库 JS Sequence Diagrams 是一个基于 JavaScript 的库,用于生成简单的时序图。它依赖于 Raphael.js 和 Underscore.js,因此需要先引入这些库[^1]。以下是使用该库的示例代码: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Sequence Diagram Example</title> <script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script> <script src="raphael-min.js"></script> <script src="underscore-min.js"></script> <script src="sequence-diagram-min.js"></script> </head> <body> <div class="diagram"> Alice->Bob: Hello Bob, how are you? Note right of Bob: Bob thinks Bob-->>Alice: I am good thanks! </div> <script> $(".diagram").sequenceDiagram({theme: 'simple'}); // 设置为矩形图形 </script> </body> </html> ``` 通过上述代码,可以生成一个简单的时序图,并且支持自定义主题样式[^1]。 #### 2. 使用WaveDrom绘制时序图 WaveDrom 是另一个流行的时序图生成工具,特别适合用于电子工程领域的波形图绘制。它的界面简洁,分为上下两部分:上部分是 WaveJSON 描述文本,下部分是渲染后的时序图[^2]。以下是一个简单的 WaveDrom 示例: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>WaveDrom Example</title> <script src="https://wavedrom.com/skins/default.js"></script> <script src="https://wavedrom.com/WaveDrom.js"></script> </head> <body> <div id="waveform"></div> <script> var json = { signal: [ { name: "clk", wave: "p....." }, { name: "dat", wave: "x.h.x", data: ["head", "body", "tail"] } ] }; WaveDrom.ProcessData(json).draw(0, document.getElementById("waveform")); </script> </body> </html> ``` WaveDrom 支持动态加载 JSON 数据,并能够实时更新时序图[^2]。 #### 3. 在Vue3中使用Mermaid绘制时序图 Mermaid 是一个功能强大的图表生成工具,支持时序图、流程图等多种图表类型。在 Vue3 中使用 Mermaid 绘制时序图时需要注意 DOM 元素的唯一性问题[^3]。以下是一个 Vue3 的示例代码: ```vue <template> <div ref="chart"></div> </template> <script> import mermaid from "mermaid"; export default { mounted() { const chartData = ` sequenceDiagram participant A as Alice participant B as Bob A->>B: Hello Bob, how are you? B-->>A: I am good, thanks! `; mermaid.initialize({ startOnLoad: false }); mermaid.render("svgId", chartData, (svgCode) => { this.$refs.chart.innerHTML = svgCode; }); } }; </script> ``` 此代码片段展示了如何在 Vue3 中动态生成时序图,并解决了 DOM 唯一性的问题。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值