当前位置: 首页 > 后端技术 > Java

PlantUML绘图软件介绍

时间:2023-04-01 18:15:36 Java

在日常工作中,我们经常会遇到需要绘制时序图和流程图的需求。当要求不高的时候,我们可以选择ProcessOn、Xmind等工具来画图,但有时候用代码画图可能效率更高。毕竟,没有人比程序员更熟悉代码了。今天给大家推荐一款绘图工具PlantUML,配合IDEA使用,绘图效率更高!一、PlantUML简介lantUML是一款开源的UML图绘制工具,支持文本生成图形,使用效率非常高。可以支持时序图、类图、对象图、活动图、思维导图等图形的绘制。下面是用PlantUML画流程图,可以实时预览,速度也很快!2、安装在IDEA中安装PlantUML插件的方法与其他插件类似。首先在IDEA的插件市场搜索PlantUML,然后安装。当然,在网络不好的时候,我们也可以点击Plguin主页按钮进入插件主页,然后下载到本地进行安装。3、使用接下来,我们来看看如何使用PlantUML插件绘制时序图、用例图、类图、活动图、思维导图,以及它们的一些使用技巧。3.1序列图序列图(SequenceDiagram)是一种UML交互图。它通过描述对象之间发送消息的时间顺序来显示多个对象之间的动态协作。通常,在系统中使用Oauth2时,首先要了解Oauth2的流程。这时候,有一个时序图就非常有必要了。下面我们使用PlantUML画出Oauth2中使用授权码方式发放token的时序图。首先,我们需要新建一个PlantUML文件,并选择时序图,如下图所示。接下来,我们就可以通过PlantUML提供的语法生成Oauth2的时序图了。@startumltitle的授权代码模式Oauth2令牌发行参与者Userasuserparticipant"UserAgent"asuserAgentparticipant"Client"asclientparticipant"AuthLogin"asloginparticipant"AuthServer"asserverautonumberuser->userAgent:accessclientactivateuserAgentuserAgent->login:Redirecttoauthorizationpage+clientId+redirectUrlactivateloginlogin->server:username+password+clientId+redirectUrlactivateserverserver-->login:returnauthorizationcodelogin-->userAgent:重定向到redirectUrl+authorizationcodecodedeactivateloginuserAgent->client:useAuthorizationcodefortokenactivateclientclient->server:authorizationcodecode+clientId+clientSecretserver-->client:issuedaccesstokenaccessToken+refreshTokendeactivateserverclient-->userAgent:returnaccessandrefreshtokendeactivateclientuserAgent-->user:token签发后,去激活userAgent@enduml然后在IDEAL面板右侧会对应生成如下时序图,是不是很爽?序列图有一些重要的参数如下:title可以用来指定UML图的标题;actor可以声明一个人形参与者;参与者可以声明一个普通类型的参与者;可以给参与者起了别名;->可以画参与关系参与者之间的关系,可以用虚线箭头-->;在每一个参与者关系的背后,你可以使用:为关系添加一个描述;autonumber我们可以自动为参与者关系添加一个序号;activate和deactivate可以指定参与者的生命线。而且,当我们右键点击时序图时,还可以生成一个在线访问的链接,如下图所示。直接访问此链接允许在线访问UML序列图和编辑。3.2用例图用例图(UsecaseDiagram)是用户与系统交互的最简单表示,主要用来表示用户与其相关用例之间的关系。通过用例图,我们可以很容易的表达出系统中各个角色和用例之间的关系。首先,我们需要新建一个PlantUML文件,选择用例图(UseCase),如下图。@startumllleft向右方向actorGuest作为gpackageProfessional{actorChief作为cactor“FoodCritic”作为fc}packageRestaurant{用例“EatFood”作为uc1用例“PayForFood”作为uc2用例“Drink”作为uc3用例“Review”"asuc4}g-->uc1g-->uc2g-->uc3fc-->uc4@enduml但是运行的时候出现如下图的错误。原因是没有安装Graphviz。这个时候你只需要安装Graphviz。安装命令如下。brewinstallGraphviz用例图有一些参数如下:lefttorightdirection表示用例图按从左到右的顺序绘制,默认是从上到下;包可以对角色和用例进行分组;参与者可以定义用户;usecase可以定义用例;角色和用例之间的关系可以用-->表示。3.3类图类图(ClassDiagram)可以表示类的静态结构,如类中包含的属性和方法,以及类的继承结构。首先,我们需要新建一个PlantUML文件,选择类图,如下图。@startumlclassPerson{#Stringname#Integerage+voidmove()+voidsay()}classStudent{-StringstudentNo+voidstudy()}classTeacher{-StringteacherNo+voidteach()}Person<|--StudentPerson<|--Teacher@enduml然后,可以看到代码生成了如下类图。类图中一些关键参数的说明如下:class可以定义一个类;在属性和方法左边加符号可以定义可见性,-表示私有,#表示保护,+表示公有;通过<|--表示类之间的继承关系。3.4活动图活动图(ActivityDiagram)通常用来表示业务流程,比如电子商务中的订单流程,比如电子商务项目中购物车中生成确认订单的流程。首先,我们需要新建一个PlantUML文件,选择活动图,然后添加以下流程控制代码。@startumltitle生成确认订单流程开始:获取购物车信息并计算折扣;:从ums_member_receive_address表中获取会员收货地址列表\n;:获取会员所有优惠券信息;switch(根据use_type判断每张优惠券是否可用)case(0):universal;if(判断所有商品的总金额\n是否满足阈值金额)then(No):获取用户无法使用的优惠券列表;stopendifcase(-1):指定类别;if(判断指定类别商品的总金额\n是否满足阈值金额)then(no):获取用户不可使用的优惠券列表;stopendifcase(-2):判断指定商品的总金额是否满足阈值金额;if(判断指定分类商品的总金额\n满足阈值金额)then(no):获取用户不可使用的优惠券列表;stopendifendswitch:获取用户可使用的优惠券列表;:获取用户积分;:获取积分使用规则;:计算总金额、活动折扣、应付金额;stop@enduml然后代码会生成如下活动图,在活动图中我们可以使用ifelse,switch,甚至while循环。活动图有如下一些说明:start和stop可以表示流程的开始和结束;:和;中间添加文字定义活动流程节点;if+then+endif定义了条件判断;switch+case+endswitch定义switch判断。3.5思维导图思维导图是表达发散思维的有效图形工具。它简单而有效,是一种实用的思维工具。首先,我们需要创建一个新的PlantUML文件并选择一个思维导图。@startmindmap+[#17ADF1]商城学习路线++[#lightgreen]推荐资料++[#lightblue]后端技术栈+++项目框架+++数据存储+++运维部署++++_其他++[#orange]构建项目skeleton++[#1DBAAF]项目部署+++_Windows下部署+++_Linux+++下使用Docker部署Linux+++下使用DockerCompose部署_Linux使用Jenkins自动化部署--[#1DBAAF]E-电商业务--_权限管理模块--_商品模块--_订单模块--_营销模块--[#orange]技术要点--[#lightblue]前端技术栈--[#lightgreen]进阶微服务--_SpringCloud技术栈--_项目部署--_技术要点--[#yellow]开发工具--[#lightgrey]扩展学习@endmindmap3.6DeploymentDiagram部署图(部署图,配置图)使用显示系统中软件和硬件的物理架构。从部署图中可以了解软硬件组件之间的物理关系以及组件在处理节点中的分布情况。使用部署图显示运行时系统的结构,同时传达构成应用程序的硬件和软件元素是如何配置和部署的。@startumlactoractoragentagentartifactboundaryboundarycardcloudcloudcomponentcloudcomponentcomponentcontroldatabasedatabaseentityentityfilefilefolderfolderframeframeinterfaceinterfaceinterfacenodenodepackagepackagequeuequeuestackstackrectanglerectanglesstorageusecaseusecase@enduml更直接。以上仅列举了一些常见的图场景。如果对PlantUML感兴趣,可以参考PlantUML中文官网