sdedit使用方法介绍(混沌向)
最近在寻找绘制时序图的过程中遇到了sdedit,感觉非常适合自己使用,故写这么篇文章向自己也向有同样需求的其它开发人员介绍一些这款软件
sdedit在macOS上安装还是非常容易的,只需要使用homebrew就可以轻松安装,命令如下
brew install sdedit
之后sdedit就会被安装到/usr/local/bin 这个目录下,在命令中输入sdedit就可以启动了。
输入sdedit后会启动一个Java Swing写的GUI程序,具体的外观和布局就不介绍了,这里主要讲解一下sdedit所支持的语法
sdedit中绘图的常用语法
PS:我对UML中的一些术语并不了解,下面的介绍是可能有错误的,具体请以sdedit的官方文档(http://sdedit.sourceforge.net/enter_text/)为准。同时,既然有官方文档了,我就不在此翻译一遍了,只记录一些常用的用法
如果需要输入整个时序图的标题(姑且叫做标题),那么可以使用下面的语法
#![一键获取手机号并登录的交互流程]
即以UNIX中的shebang开头,后面通过一对方括号包住标题内容即可
如果需要绘制一个参与时序图的节点,那么使用下面的语法(摘抄自官方文档)
<name>:<Type>[<flags>] "<label>"
其中,<name>就是节点的唯一名字,之后当描述节点间的交互时需要这个字段,请给每一个节点都取一个独一无二的名字(就像取变量名那样);<Type>部分顾名思义就是类型,虽然我在使用的时候这个字段的值也是随心所欲地写的,但这个字段对sdedit而言似乎有特殊含义——例如,如果这个字段填入的是Actor,那么绘制出来的就会是一个人形的节点,在用来表示用户的时候特别有用;(flags我还没有用过就不介绍了);label可以理解为节点的文案,如果不填<label>,那么节点在最终绘制的图中展示的时候用的就是<name>作为名字
定义好节点之后,就需要把各个节点在不同的时间用不同的消息联系起来了。描述节点间联系用的语法是(摘自官网)
<caller>[<s>]:<answer>=<callee>[m].<message>
其中的caller和callee都是写的节点的<name>(所以name需要时独一无二的),这样就会绘制出两条线——一条实线从caller指向callee,以及一条虚线从callee指向caller,以及在callee的生命周期下绘制出一个纵向的矩形,表示callee的处理过程;<message>是从caller发往callee的消息,例如参数的描述;如果需要同时描述从callee返回的结果,那么就需要填写在上述语法的的<answer>的位置——个人觉得这个语法是有点奇怪的
生成图片
上面的这些文本描述都需要输入到sdedit的文本框中(唯一UI上的右下角),之后点击保存就可以得到一个XXX.sdx的文件了。由于在我的电脑上,sdedit的GUI上的导出功能用起来非常有问题,所以我摸索出来的是在命令行导出图片文件的做法(并且可以导出的格式似乎更丰富)。总体的用法是
sdedit -t <类型> -o <输出文件名> <原始的.sdx文件>
输出文件名随性地取即可,其中类型对常用的都有支持(svg、png、jpg,和bmp),我一般常用的是png,然后就可以得到一张PNG图片了(便可以美美地用到设计文档里了)
配图什么的等我哪天特别闲了再补充上来吧