墙裂呼吁:
每个软件工程师都要学会画UML图!
软件开发过程中需要经常画各种图,流程图,时序图,状态转移图,组件图等等,画图的好处就是化繁为简,提炼本质,帮助自己和他人了解和明确需求和程序的表达。
小伙伴们都知道怎么用代码来表达一件事情,一段逻辑,但是世界是丰富的,表达的方法也是丰富的,比如有人用音乐表达,有人用绘画表达,有人用PPT表达等等,但是软件开发工程师除了使用代码来表达外,还应该掌握UML模型描述图的方法。试想在评审你负责的模块时,一开始评审人员对你的设计一无所知,突然面对一堆密密麻麻的代码是多么让人崩溃的事情。
如果你懂得如何绘制UML图,评审人员通过看UML图,例如通过流程图了解你软件的运行逻辑,通过时序图了解软件与内外部其它软件的交互关系,通过状态流图了解模块的状态流转,从多个维度评审你的软件,评审的价值才能体现,效率也会很高。而不是让大家关注的代码本身的问题,例如指针是否释放等等,这些由工具也能检查出来。
但是图也不是随便乱画的,你画的图需要大家能看得懂,UML图提供了一种标准的用图形表达的方法,掌握了这个方法,你的图就能被大家所接收,也更加专业。
01
UML介绍
UML (Unified Modeling Language),即统一建模语言,UML提供了多种类型的模型描述图(diagram),首先要注意的是 UML 涉及很多不同的图(模型),其原因是提供从许多不同的角度来审视系统。软件开发流程往往有许多角色参与其中,例如:
-分析师
-设计师
-程序员
-测试员
-质量保证员
-客户
-技术文件撰稿员
这些人都对系统的不同方面各持不同兴趣,故在建模时需要考虑不同的细节层次。例如,程序员需要了解系统的设计,并将设计转换为代码,而技术文件撰稿员则对整个系统的行为感兴趣,借以了解产品的功能。UML 提供了极富表达能力的建模语言,好让各角色至少可以从一个 UML 图表得到感兴趣的资讯。
![cbdeb6182968bb24b9d1891644239954.png](https://i-blog.csdnimg.cn/blog_migrate/889da121e8a61a1a0989afb63911dcc5.png)
UML 模型描述图
虽然UML的内涵远不只是这些模型描述图,但是对于入门来说,通过把标准的UML图放进您的工作产品中,精通UML的人员就更加容易加入项目并迅速进入角色。
02
如何画UML模型描述图
经常画图的人都知道,画好的图如果需要反复修改是非常痛苦的,图越画越大,导致画布不够大;处女座最不能忍受线条不直;要插一个小的组建或流程,挪动原来的图,然后再重新布局……
一种画图工具,利用写文本,UML图自动生成,经过我多方调查和亲身使用体验,推荐的工具如下:
工具类型 | 工具名 | 费用 | 评价 |
在线工具 | https://sequencediagram.org/ | 免费 | 功能简单,只能画时序图,但帮助文档详细 |
付费软件 | PlantUML | 免费 | 帮助文档详细,但需安装软件和依赖库graphviz和JRE |
免费软件 | EA,291服务器已安装 | 付费 | 可以画流程图,时序图,组建图等等,操作难度相当大,帮助文档相当晦涩难懂 |
_ | _ | _ | _ |
03
PlantUML的安装
系统要求:WIN10
软件包:PlantUML.jar
依赖软件:graphviz-2.38,JRE
双击PlantUML.jar ,运行界面如下图:
![279cac8716919ca23718153fbe2c9653.png](https://i-blog.csdnimg.cn/blog_migrate/ee06aef713415fef8ef1fa830b56f947.png)
先用任一文本编辑器,编写一段文本,然后将该文本保存到某一目录下,在PlantUML软件上,点击【Change Directory】选择该目录,PlantUML就会自动生成UML图,当文本变化时,PlantUML会自动检测到变化,更新UML图。
04
UML图绘制举例
下面以绘制时序图举例,介绍PlantUML绘制UML图的方法
首先,你需要了解时序图的各种定义,根据UML2.5,时序图的定义如下图,你需要了解生命线,同步message,异步message,返回message,分支(类似于if/else)等等表达方法。
![680ce4cd289c23b4052241b5bd895369.png](https://i-blog.csdnimg.cn/blog_migrate/0d74928230d5ebf56f710c51d9b07677.png)
![70d37926c76f1e5d9c9274365072b71b.png](https://i-blog.csdnimg.cn/blog_migrate/ee9692c4982f76cd97382c77eaee7979.png)
![82528839ac82eb5221d6e3d3535d1116.png](https://i-blog.csdnimg.cn/blog_migrate/df38cd80275b321512190836105f3c9a.png)
时序图Node和Path定义
然后,你打开PlantUML 帮助文档,找到你需要画的Node类型和Path类型,编写文本。
![f01707e28559ca6d84ec182750c6b15d.png](https://i-blog.csdnimg.cn/blog_migrate/686d643a9b08a6ffb9bac5026cecf7e3.jpeg)
当你需要增加1个节点时,只要修改文本内容,图自动更新
![c619c99dd1950a44bc3d64174186cc37.png](https://i-blog.csdnimg.cn/blog_migrate/a65e86fb8489b04fbc254e41df0ac278.png)
05
相关Link
网上有很多UML 图的介绍,大家可以自行查阅。
?UML2.5有一个中文的翻译,地址为:https://zhoujg.gitbooks.io/uml-2_5-zh/content/chapter17/17.2/notation_examples.html
?英文版本的下载地址为:https://www.omg.org/spec/UML/2.5/About-UML/
?PlantUML的帮助文档地址:http://plantuml.com/zh/guide
Editor:Mingyue Tang
往期图文
了解常见的深度学习卷积网络
MCAL和Configurator那些小破事
DEFECT解决指北
UFFS文件系统简述