plantUML使用指南

plantUML使用指南

PlantUML 是一个开源项目,它允许用户使用简单的文本来创建各种图表,包括序列图、用例图、类图、活动图、组件图、状态图和对象图等。这种将文转图的工具,在编写过程中可以帮助整理思路,适合一些比较擅长文字整理思路的同学

PlantUML的优势和用途

  • 优势
    • 文本表示:PlantUML 允许用户使用纯文本语言来描述图表,这使得图表的创建和修改更加容易,尤其是在版本控制系统中。
    • 易于学习:PlantUML 的语法简单直观,即使没有图形设计经验的开发者也能快速上手。
    • 平台无关性:由于 PlantUML 文件是纯文本格式,因此可以在任何文本编辑器中创建和编辑,并且可以在任何支持 PlantUML 的平台上生成图表。
    • 集成性:PlantUML 可以集成到许多流行的编辑器、IDE 和持续集成系统中,如 Visual Studio Code、Eclipse、IntelliJ IDEA、GitLab 等。
    • 自动化和可重复性:PlantUML 图表可以通过脚本或自动化工具生成,这使得图表的创建和更新可以自动化,减少了手动操作。
    • 丰富的图表类型:PlantUML 支持多种类型的图表,可以满足不同场景的需求。
    • 社区支持:PlantUML 拥有一个活跃的社区,提供了大量的文档、教程和示例,方便用户学习和解决问题。
  • 用途
    • 软件设计:在软件开发的早期阶段,使用 PlantUML 可以快速创建和修改类图、序列图等,帮助开发者更好地理解和沟通系统设计。
    • 文档编写:PlantUML 可以用来生成各种图表,帮助文档编写者更清晰地表达复杂的概念和流程。
    • 教学和演示:教师和培训师可以使用 PlantUML 创建图表来辅助教学,使学生更容易理解抽象的概念。
    • 项目管理和沟通:项目经理可以使用 PlantUML 创建用例图和活动图,以便于与非技术团队成员沟通项目需求和流程。
    • 数据库设计:PlantUML 可以用来创建数据库模型图,帮助数据库设计者可视化数据结构。
    • 系统架构:系统架构师可以使用 PlantUML 创建组件图和部署图,以便于展示系统的整体结构和部署情况。
    • 测试和验证:测试人员可以使用 PlantUML 创建状态图和序列图,帮助验证系统的行为是否符合预期。

安装和配置

PlantUML 本身是一个 Java 程序,因此首先需要安装 Java 运行环境(JRE)或 Java 开发工具包(JDK)

  1. 安装 Java

​ 在安装 PlantUML 之前,请确保您的计算机上已经安装了 Java。您可以从 Oracle 官网或其他可靠的 Java 提供商那里下载并安装 Java。java安装教程这里可以参考[JAVA环境配置](Java环境变量——Windows和Linux配置jdk(保姆级教程,文字 + 图片指导)_windows 配置jdk-CSDN博客)

  1. 下载 PlantUML

​ 访问 PlantUML 官网GitHub 仓库,下载最新的 PlantUML JAR 文件。

  1. 安装 PlantUML

​ 安装 PlantUML 相当于解压下载的 JAR 文件到指定目录。您可以使用以下命令来运行 PlantUML:

java -jar plantuml.jar
  1. 配置文本编辑器或 IDE

​ 为了更方便地使用 PlantUML,您可以配置您的文本编辑器或 IDE 来支持 PlantUML。以下是一些流行的编辑器和 IDE 的配置方法:

Visual Studio Code

  1. 安装 PlantUML 扩展:在 VS Code 中,转到扩展视图并搜索 PlantUML,然后安装它。
  2. 配置 PlantUML 扩展:安装扩展后,您可能需要配置 PlantUML 的路径。打开设置(Ctrl + ,),搜索 PlantUML,并设置 plantuml.jar 的路径。

IntelliJ IDEA

  1. 安装 PlantUML 插件:转到 File > Settings > Plugins,搜索 PlantUML 并安装它。

  2. 配置 PlantUML 插件:安装插件后,您可能需要配置 PlantUML 的路径。转到 File > Settings > Tools > PlantUML,并设置 plantuml.jar 的路径。

  3. 测试安装

​ 配置完成后,您可以创建一个简单的 PlantUML 文件来测试安装是否成功。例如,创建一个名为 example.puml 的文件,并添加以下内容:

@startuml
class Example {
  +void helloWorld()
}
@enduml

然后在命令行中运行以下命令来生成图表:

java -jar plantuml.jar example.puml

如果一切正常,这将生成一个名为 example.png 的图片文件。

或者在插件中运行,vs code示例

请添加图片描述

PlantUML的基本语法

基本语法规则
  • 注释:以 @startuml 开始,以 @enduml 结束。注释行以 `#’ 开头。
  • 类定义:使用 class 关键字后跟类名和类体,类体在大括号内。
  • 属性和方法:在类体内部,使用 + 表示公共属性/方法,- 表示私有属性/方法,# 表示受保护的属性/方法。
  • 关系:使用不同的关键字来表示不同类型的关系,如 -- 表示关联,*-- 表示聚合,o-- 表示组合。
  • 箭头:使用箭头来表示方向性,如 --> 表示单向关联。

示例如下

@startuml
class Class1 {
  +String field1
  +void method1()
}

class Class2 {
  -int field2
  #void method2()
}

Class1 -- Class2 : Association
@enduml

在这里插入图片描述

常见的PlantUML图类型

类图
  • 类的定义:类的基本定义包括类名、属性和方法。在 PlantUML 中,使用 class 关键字后跟类名和类体,类体在大括号内。

    class ClassName {
      +String attribute1
      -int attribute2
      #void method1()
      public void method2()
    }
    
  • 类的属性和方法修饰符

    • +:表示公共(public)属性或方法
    • -:表示私有(private)属性或方法
    • #:表示受保护(protected)属性或方法
    • ~:表示默认(package-private)访问权限的属性或方法
  • 类之间关系

    • 关联(Association):使用 -- 表示
    • 聚合(Aggregation):使用 o-- 表示,表示部分与整体的关系
    • 组合(Composition):使用 *-- 表示,表示更强的部分与整体的关系
    • 继承(Inheritance):使用 extends 关键字或 --|> 表示
    • 实现(Implementation):使用 implements 关键字或 ..|> 表示

复杂类示例

@startuml

class Car {
  +String model
  +int year
  +void drive()
}

class Engine {
  +String type
  +void start()
}

class Wheel {
  +int size
}

Car "1" o-- "4" Wheel
Car "1" *-- "1" Engine

class Driver {
  +String name
  +Car car
  +void driveCar()
}

Driver "1" -- "1" Car

@enduml

在这里插入图片描述

在这个示例中:

  • Car 类有一个聚合关系(o--)与 Wheel 类,表示一辆车有四个轮子。
  • Car 类有一个组合关系(*--)与 Engine 类,表示发动机是车的一部分。
  • Driver 类有一个关联关系(--)与 Car 类,表示司机可以驾驶一辆车。
时序图
  • 基本组成部分
    • 参与者(Actors):系统外部与系统交互的用户或其他系统。
    • 对象(Objects):系统内的对象,可以是类实例或具体对象。
    • 生命线(Lifelines):表示对象或参与者在一段时间内的存在。
    • 消息(Messages):对象之间传递的信息,可以是同步消息、异步消息或返回消息。
    • 激活(Activations):表示方法的执行时间。
    • 帧(Frames):用于将元素组织成逻辑组,通常用于表示系统的边界或一个用例。
  • 基本语法
    • 参与者:使用 actor 关键字后跟参与者名称。
    • 对象:使用 participant 关键字后跟对象名称。
    • 消息:使用箭头表示,箭头方向指示消息的流动方向。
    • 激活:使用 activatedeactivate 关键字表示方法的开始和结束。
    • :使用 rectangle 关键字后跟帧的标题和内容。
@startuml
actor User
participant "First Class" as A
participant "Second Class" as B

User -> A: DoWork
activate A
A -> B: Create
activate B
B --> A: Done
deactivate B
A --> User: WorkDone
deactivate A
@enduml

在这里插入图片描述

在这个示例中

  • User 是一个参与者,它与 First Class 对象交互。
  • First Class 对象发送 DoWork 消息给 Second Class 对象。
  • Second Class 对象完成工作后,发送 Done 消息返回给 First Class 对象。
  • First Class 对象发送 WorkDone 消息返回给 User 参与者。

高级功能

PlantUML 还支持时序图的高级功能,如:

  • 并行处理:使用 alt/elseoptloop 等关键字表示条件分支、选项和循环。
  • 组合片段:使用 group 关键字将消息组织在一起,通常用于表示事务或场景。
  • 颜色和样式:可以自定义消息、生命线和帧的颜色和样式。
用例图

用例图展示了系统的功能性需求,帮助人们理解系统的高层视角和外部行为。

基本组成部分

  1. 参与者(Actors):与系统交互的外部实体,可以是用户、其他系统或设备。

  2. 用例(Use Cases):系统的功能单元,代表了一个可观察的目标或任务。

  3. 关系

    表示参与者和用例之间的关系,以及用例之间的关系。

    • 关联关系:参与者与用例之间的交互。
    • 包含关系:一个用例包含另一个用例的行为。
    • 扩展关系:一个用例在特定条件下扩展另一个用例的行为。
    • 泛化关系:用例之间的继承关系,一个用例是另一个用例的特殊类型。

基本语法

  • 参与者:使用 actor 关键字后跟参与者名称。
  • 用例:使用 usecase 关键字后跟用例名称。
  • 关联关系:使用箭头 --> 表示参与者和用例之间的交互。
  • 包含关系:使用 include 关键字和箭头 ..> 表示。
  • 扩展关系:使用 extend 关键字和箭头 ..> 表示。
  • 泛化关系:使用 generalization 关键字和箭头 ..> 表示。

示例

下面是一个简单的用例图示例,展示了一个图书馆管理系统中的参与者和用例:

@startuml
left to right direction
actor "Library User" as user
actor "Librarian" as lib

rectangle "Library System" {
  usecase "Search for Books" as search
  usecase "Borrow Books" as borrow
  usecase "Return Books" as return
  usecase "Manage Books" as manage
}

user --> search
user --> borrow
user --> return
lib --> manage
lib --> search
lib --> borrow
lib --> return

manage ..> search
manage ..> borrow
manage ..> return

@enduml

在这里插入图片描述

在这个示例中:

  • 有两个参与者:Library UserLibrarian
  • 有四个用例:Search for BooksBorrow BooksReturn BooksManage Books
  • Library User 参与者与三个用例有直接的关联关系。
  • Librarian 参与者与所有四个用例有直接的关联关系。
  • Manage Books 用例是其他三个用例的泛化,表示它包含了其他用例的行为。
活动图

活动图展示了系统的动态行为,包括动作(activities)、决策(decisions)、分支(forks)、合并(joins)和并发(concurrency)。活动图类似于流程图,但提供了更丰富的语义来描述复杂的过程。

基本组成部分

  1. 开始节点(Start Node):表示流程的开始。
  2. 结束节点(End Node):表示流程的结束。
  3. 活动(Activities):表示过程中的步骤或操作。
  4. 决策节点(Decision Node):表示过程中的分支点,根据条件选择不同的路径。
  5. 分支(Fork):表示流程中的并发执行点。
  6. 合并(Join):表示并发执行路径的汇合点。
  7. 控制流(Control Flows):表示活动之间的流程转移。
  8. 对象(Objects):表示过程中创建或使用的数据对象。
  9. 数据流(Data Flows):表示数据在活动之间的流动。

基本语法

  • 开始节点:使用 start 关键字。
  • 结束节点:使用 end 关键字。
  • 活动:使用 : 后跟活动名称。
  • 决策节点:使用 ifelseendif 关键字。
  • 分支:使用 forkfork again 关键字。
  • 合并:使用 join 关键字。
  • 控制流:使用 -> 表示。
  • 对象:使用 rectangle 关键字后跟对象名称。
  • 数据流:使用 --> 表示。

示例

下面是一个简单的活动图示例,展示了一个登录流程:

@startuml
start
:Login Page;
if (Valid credentials?) then (yes)
  :Access granted;
  -> End;
else
  :Access denied;
  -> End;
endif
@enduml

在这里插入图片描述

在这个示例中:

  • 流程从开始节点开始。
  • 用户到达登录页面。
  • 如果输入的凭据有效,则允许访问。
  • 如果凭据无效,则拒绝访问。
  • 流程在结束节点结束。

高级功能

PlantUML 还支持活动图的高级功能,如:

  • 对象:可以在活动图中定义和操作对象。
  • 数据流:可以显示数据在活动之间的流动。
  • 并发:使用 forkjoin 关键字表示并发执行。
  • 泳道(Swimlanes):使用 partition 关键字将活动组织到不同的泳道中,通常用于表示不同的责任区域或角色。
状态图

状态图用于描述对象在其生命周期内可能处于的状态,以及导致状态转换的事件和条件。状态图专注于对象的动态行为,展示了对象如何响应外部事件和内部条件的变化。在 PlantUML 中,状态图的语法相对简单,但足以表达复杂的状态转换逻辑。

基本组成部分

  1. 状态(States):对象在其生命周期内可能处于的条件或情形。
  2. 初始状态(Initial State):表示对象生命周期的开始。
  3. 最终状态(Final State):表示对象生命周期的结束。
  4. 转换(Transitions):表示状态之间的迁移,通常由事件或条件触发。
  5. 事件(Events):导致状态转换发生的事情。
  6. 条件(Conditions):决定状态转换是否发生的逻辑表达式。
  7. 动作(Actions):在状态转换过程中执行的操作。

基本语法

  • 状态:使用 state "State Name" as Statename 表示。
  • 初始状态:使用 [*] 表示。
  • 最终状态:使用 state "End" as end 表示。
  • 转换:使用 -->-> 表示,可以在箭头上方标注事件和条件。
  • 事件:在转换线上方使用 [EventName / Condition] 表示。
  • 条件:在事件名称后面使用 {Condition} 表示。
  • 动作:在转换线上方使用 / Action 表示。

示例

下面是一个简单的状态图示例,展示了一个电灯开关的状态转换:

@startuml
state "Off" as off
state "On" as on
[*] --> off
off --> on : TurnOn / PowerOn()
on --> off : TurnOff / PowerOff()
@enduml

在这里插入图片描述

在这个示例中:

  • 电灯的初始状态是关(Off)。
  • 当触发 TurnOn 事件时,如果电源打开(PowerOn),状态将转换为开(On)。
  • 当触发 TurnOff 事件时,执行 PowerOff 动作,状态将转换回关(Off)。

高级功能

PlantUML 还支持状态图的高级功能,如:

  • 复合状态:使用 state "Composite State" as name { 开始,使用 } 结束,可以包含子状态。
  • 历史状态:使用 state "History" as his { 开始,使用 } 结束,用于返回到之前的状态。
  • 并发状态:使用 state "Concurrent State" as.concurrent { 开始,使用 } 结束,表示同时存在多个状态。
部署图

部署图(Deployment Diagram),用于描述系统中软件和硬件的物理架构和配置。它展示了系统的节点(nodes)以及节点之间的关系,包括处理节点(如服务器和计算机)和设备节点(如传感器和打印机)。部署图帮助理解系统的物理分布,以及如何将软件组件部署到硬件上。

基本组成部分

  1. 节点(Nodes):表示硬件设备或运行时的环境,可以是计算机、服务器、设备或软件执行环境。
  2. 组件(Components):表示软件系统中的逻辑部分,可以是应用程序、库或服务。
  3. 连接(Associations):表示节点之间的物理连接,包括通信路径和协议。
  4. 部署(Deployments):表示软件组件部署到硬件节点上的关系。

基本语法

  • 节点:使用 node 关键字后跟节点名称。
  • 组件:使用 component 关键字后跟组件名称。
  • 连接:使用 ----> 表示节点之间的连接。
  • 部署:使用 --> 表示组件部署到节点上的关系。

示例

下面是一个简单的部署图示例,展示了一个简单的 Web 应用程序的部署:

@startuml
node webserver {
  component WebApplication
}

node database {
  component Database
}

webserver --> database : JDBC
@enduml

在这里插入图片描述

在这个示例中:

  • 有两个节点:webserverdatabase
  • webserver 节点包含一个 WebApplication 组件。
  • database 节点包含一个 Database 组件。
  • 两个节点之间有一个连接,表示 WebApplication 通过 JDBC(Java Database Connectivity)与 Database 通信。

高级功能

PlantUML 还支持部署图的高级功能,如:

  • 节点类型:可以使用不同的形状来表示不同类型的节点,如服务器、工作站、设备等。
  • 容器:可以使用 artifact 关键字来表示容器,如容器化的应用程序。
  • 通信协议:可以在连接线上方标注通信协议,如 HTTP、HTTPS、TCP/IP 等。

学习资源和建议

学习资源推荐

官方资源

  1. PlantUML 官方网站plantuml.com
    • 官方网站提供了大量的文档、教程和示例,是学习 PlantUML 的最佳起点。
  2. PlantUML GitHub 仓库github.com/plantuml/plantuml
    • GitHub 仓库是获取最新信息和下载 PlantUML 的地方,同时也是贡献代码和报告问题的平台。

在线教程和课程

  1. YouTube 教程:YouTube 上有许多免费的 PlantUML 教程和演示视频,适合视觉学习者。
  2. 博客文章和教程:许多博客作者分享了他们使用 PlantUML 的经验和教程,这些文章通常包含实用的示例和技巧。

书籍

  1. 《PlantUML Language Reference Guide》:虽然这是一本官方的参考指南,但它详细介绍了 PlantUML 的语法和功能,适合那些希望深入了解语言的人。
  2. 《Learning PlantUML》:这是一本针对初学者的书籍,它提供了一个结构化的学习路径,涵盖了从基础到高级的主题。

社区和论坛

  1. Stack Overflowstackoverflow.com/tags/plantuml
    • Stack Overflow 是一个问答网站,您可以在其中找到关于 PlantUML 的问题和答案。
  2. PlantUML Google Groupgroups.google.com/forum/#!forum/plantuml
    • Google Group 是一个官方的论坛,PlantUML 用户可以在这里提问和分享经验。

工具集成

  1. IDE 和文本编辑器插件:大多数流行的 IDE 和文本编辑器都有 PlantUML 插件,这些插件提供了语法高亮、图形预览和即时渲染等功能,极大地提高了生产力。
学习建议
  • 从简单开始:先从创建基本的图表开始,如类图和用例图,然后逐渐尝试更复杂的图表类型。
  • 实践为主:通过实际创建图表来学习,将您的学习应用到实际项目中,这样可以更快地掌握 PlantUML。
  • 参考示例:查看官方文档中的示例,以及 GitHub 仓库中的测试用例,这些都是学习 PlantUML 语法和功能的好方法。
  • 参与社区:加入 PlantUML 的社区,提问、回答问题,分享您的作品,这样可以获得反馈并从他人的经验中学习。
  • 持续学习:PlantUML 不断更新和改进,定期查看官方文档和社区论坛,了解最新的功能和最佳实践。
  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值