PlantUML语法(全)及使用教程-用例图

news/2024/4/17 16:51:42

目录

    • 1. 用例图
      • 1.1、什么是用例图
      • 1.2、用例图的构成
      • 1.3、参与者
      • 1.4、用例
        • 1.4.1、用例基本概念
        • 1.4.2、用例的识别
        • 1.4.3、用例的要点
        • 1.4.3、用例的命名
        • 1.4.4、用例的粒度
      • 1.5、应用示例
        • 1.5.1、用例
        • 1.5.2、角色
        • 1.5.3、改变角色的样式
        • 1.5.4、用例描述
        • 1.5.5、改变箭头方向
        • 1.5.6、使用注释
        • 1.5.7、使用包
      • 1.6、完整示例


1. 用例图

用例图是软件工程中的一种可视化表示方法,用于描述系统角色与系统本身之间的交互。它通过说明用例和与用例交互的角色来捕捉系统的动态行为。这些图表对于明确系统的功能要求和了解用户如何与系统交互至关重要。通过提供一个高层次的视图,用例图可以帮助利益相关者了解系统的功能及其潜在价值。PlantUML通过其基于文本的语言,为创建用例图提供了一种独特的方法。使用 PlantUML的主要优势之一就是简单高效。用户可以使用直观简洁的文字描述来定义图表,而不是手动绘制形状和连接。这不仅加快了图表创建过程,还确保了一致性和准确性。

1.1、什么是用例图

用例图(Use Case Diagram)是由参与者(Actor)、用例(Use Case)以及它们之间的关系构成的用于描述系统功能的视图,是被称为参与者的外部用户所能观察到的系统功能的模型图。

1.2、用例图的构成

用例图中主要的元素包括参与者用例以及各元素之间的关系。除此之外,用例图中还可以包含注解约束

1.3、参与者

参与者(Actor)是与主体系统交互的外部实体。参与者可以是系统外部的人、子系统、其它系统等。

1.4、用例

1.4.1、用例基本概念

用例是参与者可以感受到的系统服务或功能单元。它定义了系统要实现的一个目标。用例只定义系统的一个行为,而不显示系统的内部结构。
用例最大的优点是站在用户的角度描述系统功能。

1.4.2、用例的识别

  1. 参与者需要系统提供哪些功能,以支持他的工作?
  2. 参与者是否需要查询系统中的某些信息?
  3. 参与者是否需要改变系统中的某些信息,如创建、修改和删除操作?
  4. 系统发生的特定事件或状态的改变是否需要通知参与者?
  5. 系统哪些外部事件会促使系统执行相关功能以应对?
  6. 系统是否提供相关功能以帮助维护人员来维护系统?
1.4.3、用例的要点

  1. 识别出的用例应该反应出系统的目标,即“要做什么”,而非“怎么做”,就是说用例不是系统实现的细节;
  2. 从参与者(用户)的角度出发定义用例,而非系统的角度;
  3. 用例应为参与者提供有价值的结果,而非动作的集合;
  4. 避免陷入功能分解,步骤分解;
  5. 每个参与者都应该有可执行的用例,每个用例都应关联至少一个参与者。
1.4.3、用例的命名

用例的命名需要站在用户的角度描述参与者达到的目标

命名方式:(状语)动词+(定语)宾语
比如使用微信支付、订餐、选课、借书。

1.4.4、用例的粒度

用例粒度是指用例细化或综合系统功能的程度。也可以说用例所包含的系统服务或功能单元的多少。用例粒度过粗或过大,则用例包含的系统功能就越多,反之越少。

用例粒度过细
系统中很多业务都包含这种增、删、改、查的操作,这样做并不能为用户提供任何有意义的目标,反而会忽略了用户的真正目的

在这里插入图片描述


  • 修改如下:
    上面这种“增删改查”无非就是用户管理,这才是参与者的真实目的。
    在这里插入图片描述

把步骤当用例


  • 修改如下:
    在这里插入图片描述

1.5、应用示例

1.5.1、用例

用例用圆括号括起来(两个圆括号看起来就像椭圆)。 也可以用关键字usecase来定义用例。
还可以用关键字as定义一个别名,这个别名可以在以后定义关系的时候使用。

@startuml(用例1)
usecase 用例2
(用例3) as (YL3)
usecase (用例4\n测试)
@enduml

在这里插入图片描述

1.5.2、角色

角色用两个冒号包裹起来。 也可以用actor关键字来定义角色。 还可以用关键字as来定义一个别名,这个别名可以在以后定义关系的时候使用。

@startuml:角色1:
:角色2\n测试: as JS2
actor 角色3
actor :角色4: as JS4@enduml

在这里插入图片描述

1.5.3、改变角色的样式

用户头像样式:skinparam actorStyle awesome
透明人样式:skinparam actorStyle hollow

在这里插入图片描述
在这里插入图片描述

1.5.4、用例描述

如果想定义跨越多行的用例描述,可以用双引号将其裹起来。 还可以使用这些分隔符:

  • –(横线)
  • …(虚线)
  • ==(双横线)
  • __(下划线)

在这里插入图片描述

1.5.5、改变箭头方向

默认情况下,类之间的链接有两个破折号-- ,并且是垂直方向的。 可以通过像这样放一个破折号(或点)来使用水平链接
也可以通过反转链接来改变方向

@startuml:user: -> (用例1)
:user: --> (用例2)newpage
(用例3) <.. :user:
(用例4) <- :user:@enduml

在这里插入图片描述

通过在箭头内添加left,right,up 或down 关键字来改变箭头方向

@startumlusecase 增加用户 #red
usecase 删除用户 #yellow
usecase 修改用户 #pink
usecase 查询用户 #blue
usecase 管理用户管理用户 -left->  增加用户
管理用户 -right-> 删除用户
管理用户 .down.> 修改用户
管理用户 -up-> 查询用户
@enduml

在这里插入图片描述

1.5.6、使用注释

用note left of , note right of , note top of , note bottom of等关键字给一个对象添加注释。

在这里插入图片描述

1.5.7、使用包

使用包来对角色或用例进行分组,rectangle来改变包的外观

@startuml
left to right direction
actor 图书管理员 as g
package 学生 {actor 大学生 as cactor "研究生" as fc
}
rectangle 图书管理 {usecase "整理书籍" as UC1usecase "购买书籍" as UC2usecase "借阅书籍" as UC4
}
fc --> UC4
g --> UC1
g --> UC2
c->UC4
@enduml

在这里插入图片描述

1.6、完整示例

@startuml
left to right direction
actor 用户
skinparam actorStyle awesome
actor 管理员rectangle 操作 {usecase "注册" #blueusecase "登录"usecase "进入游戏"usecase "查看历史比赛"usecase "查看排行榜"usecase "修改密码"usecase "注销账号"usecase "删除用户"usecase "重置密码"usecase "删除记录"usecase "查看记录"
}
note right of 用户:用户管理note
note "用户管理note2" as N2
用户 .. N2用户 --> 注册
用户 --> 登录
注册 -> 登录
登录 --> 进入游戏
进入游戏 --> 查看历史比赛
进入游戏 --> 查看排行榜
登录 --> 修改密码
登录 --> 注销账号
管理员-->删除用户 #red  :删除用户
管理员-->重置密码 #blue;line.dotted;text:blue : 重置密码
管理员-->删除记录 #green;line.dashed;text:green : 删除\n记录
管理员-->查看记录 #line:red;line.bold;text:red  : 查看记录skinparam actorStyle hollow
:用户三:-->(用例)@enduml

在这里插入图片描述

参考:
https://plantuml.com/zh/use-case-diagram
https://baijiahao.baidu.com/s?id=1711675795326766131


https://www.xjx100.cn/news/3118781.html

相关文章

OpenCV4.x图像处理实例-常见图像滤镜特效实现

常见20多种图像滤镜特效实现 文章目录 常见20多种图像滤镜特效实现0、准备1、亮度调节2、细节强化3、底片效果4、卡通效果5、浮雕效果6、铅笔素描效果7、夏季或温色滤镜8、冬季或冷色滤波9、Splash滤镜10、双色调(Duo-Tone)滤镜11、日光(Daylight)滤镜12、60sTVs效果13、高…

记录一次现网问题排查(分享查域名是否封禁小程序)

背景&#xff1a; 收到工单反馈说现网业务一个功能有异常&#xff0c;具体现象是tc.hb.cn域名无法访问&#xff0c;客户地区是河南省&#xff0c;这里记录下排查过程和思路。 首先梳理链路 客户端域名 tc.hb.cn cname—> domainparking-dnspod.cn(新加坡clb)—> snat—&…

【知识】稀疏矩阵是否比密集矩阵更高效?

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 问题提出 有些地方说&#xff0c;稀疏图比密集图的计算效率更高&#xff0c;真的吗&#xff1f; 原因猜想 这里的效率高&#xff0c;应该是有前提的&#xff1a;当使用稀疏矩阵的存储格式(如CSR)时&#xff0c;计…

国内首个农业开源鸿蒙操作系统联合华为正式发布

2023年11月29日&#xff0c;在中国国际供应链促进博览会上&#xff0c;中信农业科技股份有限公司&#xff08;简称“中信农业”&#xff09;与深圳开鸿数字产业发展有限公司&#xff08;简称“深开鸿”&#xff09;以及华为技术有限公司&#xff08;简称“华为”&#xff09;联…

DeepStream系列之rtmpsink功能,rtsp转rtmp,opencv读取rtsp图像处理后推流rtmp

了解到一个更好的流媒体开源项目&#xff0c;是中国人写的&#xff0c;项目地址 https://github.com/ossrs/srs&#xff0c;有兴趣的可以尝试下&#xff0c;实时性更快 DeepStream系列之rtmpsink功能 实时性没要求&#xff0c;可以用下面的opencv opencv读取rtsp图像处理后推流…

Django回顾【三】

目录 一、模板层 1、介绍 2、了解 3、页面静态化 4、模版语法 5、内置过滤器 6、标签 for标签 if 标签 7、模板导入和继承 模板导入 模板继承 一、模板层 1、介绍 模板在浏览器中是运行不了的 ----》因为它有模板语法 ----》浏览器解析不了模板语法 必须在后端渲…

kubernetes七层负载Ingress搭建(K8S1.23.5)

首先附上K8S版本及Ingress版本对照 Ingress介绍 NotePort&#xff1a;该方式的缺点是会占用很多集群机器的端口&#xff0c;当集群服务变多时&#xff0c;这个缺点就愈发的明显(srevice变多&#xff0c;需要的端口就需要多) LoadBalancer&#xff1a;该方式的缺点是每个servi…

鸿蒙4.0开发笔记之ArkTS装饰器语法基础@Extend扩展组件样式与stateStyles多态样式(十一)

一、Extend扩展组件样式 1、作用 前文提到可以使用Styles用于样式的扩展&#xff0c;在Styles的基础上&#xff0c;ArkTS语法还提供了Extend&#xff0c;⽤于扩展原生组件样式&#xff0c;包括Text、Button等等。 2、定义语法 Extend(UIComponentName) function functionNam…