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:

shell 复制代码
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 的文件,并添加以下内容:

plantuml 复制代码
@startuml
class Example {
  +void helloWorld()
}
@enduml

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

shell 复制代码
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 关键字和箭头 ..> 表示。

示例

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

plantuml 复制代码
@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 关键字后跟对象名称。
  • 数据流 :使用 --> 表示。

示例

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

platnuml 复制代码
@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 表示。

示例

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

platnuml 复制代码
@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 不断更新和改进,定期查看官方文档和社区论坛,了解最新的功能和最佳实践。
相关推荐
艾利克斯冰1 天前
Java设计模式详解-七大设计原则(持续更新中)
设计模式·uml·开闭原则
HEADKON1 天前
尼洛替尼300mg每日两次空腹服用治慢粒,QT延长风险高,低钾低镁需纠正后用药
uml
rolt3 天前
PlantUML描述《分析模式》第4章企业财务观察(2)
领域模型·架构师·uml
吴声子夜歌6 天前
PlantUML——状态图
uml·plantuml·状态图
吴声子夜歌6 天前
PlantUML——序列图
uml·plantuml·序列图
吴声子夜歌6 天前
PlantUML——活动图
uml·plantuml·活动图
吴声子夜歌7 天前
PlantUML——类图(一)
uml
吴声子夜歌7 天前
PlantUML——类图(二)
uml·plantuml·类图
吴声子夜歌7 天前
PlantUML——对象图
uml·plantuml·对象图
吴声子夜歌8 天前
PlantUML——用例图
uml·plantuml