文章目录
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)
- 安装 Java
在安装 PlantUML 之前,请确保您的计算机上已经安装了 Java。您可以从 Oracle 官网或其他可靠的 Java 提供商那里下载并安装 Java。java安装教程这里可以参考[JAVA环境配置](Java环境变量------Windows和Linux配置jdk(保姆级教程,文字 + 图片指导)_windows 配置jdk-CSDN博客)
- 下载 PlantUML
访问 PlantUML 官网或 GitHub 仓库,下载最新的 PlantUML JAR 文件。
- 安装 PlantUML
安装 PlantUML 相当于解压下载的 JAR 文件到指定目录。您可以使用以下命令来运行 PlantUML:
shell
java -jar plantuml.jar
- 配置文本编辑器或 IDE
为了更方便地使用 PlantUML,您可以配置您的文本编辑器或 IDE 来支持 PlantUML。以下是一些流行的编辑器和 IDE 的配置方法:
Visual Studio Code
- 安装 PlantUML 扩展:在 VS Code 中,转到扩展视图并搜索 PlantUML,然后安装它。
- 配置 PlantUML 扩展:安装扩展后,您可能需要配置 PlantUML 的路径。打开设置(
Ctrl + ,
),搜索 PlantUML,并设置plantuml.jar
的路径。
IntelliJ IDEA
-
安装 PlantUML 插件:转到
File > Settings > Plugins
,搜索 PlantUML 并安装它。 -
配置 PlantUML 插件:安装插件后,您可能需要配置 PlantUML 的路径。转到
File > Settings > Tools > PlantUML
,并设置plantuml.jar
的路径。 -
测试安装
配置完成后,您可以创建一个简单的 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
关键字或..|>
表示
- 关联(Association):使用
复杂类示例
@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
关键字后跟对象名称。 -
消息:使用箭头表示,箭头方向指示消息的流动方向。
-
激活 :使用
activate
和deactivate
关键字表示方法的开始和结束。 -
帧 :使用
rectangle
关键字后跟帧的标题和内容。@startuml
actor User
participant "First Class" as A
participant "Second Class" as BUser -> 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/else
、opt
、loop
等关键字表示条件分支、选项和循环。 - 组合片段 :使用
group
关键字将消息组织在一起,通常用于表示事务或场景。 - 颜色和样式:可以自定义消息、生命线和帧的颜色和样式。
用例图
用例图展示了系统的功能性需求,帮助人们理解系统的高层视角和外部行为。
基本组成部分
-
参与者(Actors):与系统交互的外部实体,可以是用户、其他系统或设备。
-
用例(Use Cases):系统的功能单元,代表了一个可观察的目标或任务。
-
关系:
表示参与者和用例之间的关系,以及用例之间的关系。
- 关联关系:参与者与用例之间的交互。
- 包含关系:一个用例包含另一个用例的行为。
- 扩展关系:一个用例在特定条件下扩展另一个用例的行为。
- 泛化关系:用例之间的继承关系,一个用例是另一个用例的特殊类型。
基本语法
- 参与者 :使用
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 User
和Librarian
。 - 有四个用例:
Search for Books
、Borrow Books
、Return Books
和Manage Books
。 Library User
参与者与三个用例有直接的关联关系。Librarian
参与者与所有四个用例有直接的关联关系。Manage Books
用例是其他三个用例的泛化,表示它包含了其他用例的行为。
活动图
活动图展示了系统的动态行为,包括动作(activities)、决策(decisions)、分支(forks)、合并(joins)和并发(concurrency)。活动图类似于流程图,但提供了更丰富的语义来描述复杂的过程。
基本组成部分
- 开始节点(Start Node):表示流程的开始。
- 结束节点(End Node):表示流程的结束。
- 活动(Activities):表示过程中的步骤或操作。
- 决策节点(Decision Node):表示过程中的分支点,根据条件选择不同的路径。
- 分支(Fork):表示流程中的并发执行点。
- 合并(Join):表示并发执行路径的汇合点。
- 控制流(Control Flows):表示活动之间的流程转移。
- 对象(Objects):表示过程中创建或使用的数据对象。
- 数据流(Data Flows):表示数据在活动之间的流动。
基本语法
- 开始节点 :使用
start
关键字。 - 结束节点 :使用
end
关键字。 - 活动 :使用
:
后跟活动名称。 - 决策节点 :使用
if
、else
和endif
关键字。 - 分支 :使用
fork
和fork again
关键字。 - 合并 :使用
join
关键字。 - 控制流 :使用
->
表示。 - 对象 :使用
rectangle
关键字后跟对象名称。 - 数据流 :使用
-->
表示。
示例
下面是一个简单的活动图示例,展示了一个登录流程:
platnuml
@startuml
start
:Login Page;
if (Valid credentials?) then (yes)
:Access granted;
-> End;
else
:Access denied;
-> End;
endif
@enduml
在这个示例中:
- 流程从开始节点开始。
- 用户到达登录页面。
- 如果输入的凭据有效,则允许访问。
- 如果凭据无效,则拒绝访问。
- 流程在结束节点结束。
高级功能
PlantUML 还支持活动图的高级功能,如:
- 对象:可以在活动图中定义和操作对象。
- 数据流:可以显示数据在活动之间的流动。
- 并发 :使用
fork
和join
关键字表示并发执行。 - 泳道(Swimlanes) :使用
partition
关键字将活动组织到不同的泳道中,通常用于表示不同的责任区域或角色。
状态图
状态图用于描述对象在其生命周期内可能处于的状态,以及导致状态转换的事件和条件。状态图专注于对象的动态行为,展示了对象如何响应外部事件和内部条件的变化。在 PlantUML 中,状态图的语法相对简单,但足以表达复杂的状态转换逻辑。
基本组成部分
- 状态(States):对象在其生命周期内可能处于的条件或情形。
- 初始状态(Initial State):表示对象生命周期的开始。
- 最终状态(Final State):表示对象生命周期的结束。
- 转换(Transitions):表示状态之间的迁移,通常由事件或条件触发。
- 事件(Events):导致状态转换发生的事情。
- 条件(Conditions):决定状态转换是否发生的逻辑表达式。
- 动作(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)以及节点之间的关系,包括处理节点(如服务器和计算机)和设备节点(如传感器和打印机)。部署图帮助理解系统的物理分布,以及如何将软件组件部署到硬件上。
基本组成部分
- 节点(Nodes):表示硬件设备或运行时的环境,可以是计算机、服务器、设备或软件执行环境。
- 组件(Components):表示软件系统中的逻辑部分,可以是应用程序、库或服务。
- 连接(Associations):表示节点之间的物理连接,包括通信路径和协议。
- 部署(Deployments):表示软件组件部署到硬件节点上的关系。
基本语法
- 节点 :使用
node
关键字后跟节点名称。 - 组件 :使用
component
关键字后跟组件名称。 - 连接 :使用
--
或-->
表示节点之间的连接。 - 部署 :使用
-->
表示组件部署到节点上的关系。
示例
下面是一个简单的部署图示例,展示了一个简单的 Web 应用程序的部署:
@startuml
node webserver {
component WebApplication
}
node database {
component Database
}
webserver --> database : JDBC
@enduml
在这个示例中:
- 有两个节点:
webserver
和database
。 webserver
节点包含一个WebApplication
组件。database
节点包含一个Database
组件。- 两个节点之间有一个连接,表示
WebApplication
通过 JDBC(Java Database Connectivity)与Database
通信。
高级功能
PlantUML 还支持部署图的高级功能,如:
- 节点类型:可以使用不同的形状来表示不同类型的节点,如服务器、工作站、设备等。
- 容器 :可以使用
artifact
关键字来表示容器,如容器化的应用程序。 - 通信协议:可以在连接线上方标注通信协议,如 HTTP、HTTPS、TCP/IP 等。
学习资源和建议
学习资源推荐
官方资源
- PlantUML 官方网站 :plantuml.com
- 官方网站提供了大量的文档、教程和示例,是学习 PlantUML 的最佳起点。
- PlantUML GitHub 仓库 :github.com/plantuml/plantuml
- GitHub 仓库是获取最新信息和下载 PlantUML 的地方,同时也是贡献代码和报告问题的平台。
在线教程和课程
- YouTube 教程:YouTube 上有许多免费的 PlantUML 教程和演示视频,适合视觉学习者。
- 博客文章和教程:许多博客作者分享了他们使用 PlantUML 的经验和教程,这些文章通常包含实用的示例和技巧。
书籍
- 《PlantUML Language Reference Guide》:虽然这是一本官方的参考指南,但它详细介绍了 PlantUML 的语法和功能,适合那些希望深入了解语言的人。
- 《Learning PlantUML》:这是一本针对初学者的书籍,它提供了一个结构化的学习路径,涵盖了从基础到高级的主题。
社区和论坛
- Stack Overflow :stackoverflow.com/tags/plantuml
- Stack Overflow 是一个问答网站,您可以在其中找到关于 PlantUML 的问题和答案。
- PlantUML Google Group :groups.google.com/forum/#!forum/plantuml
- Google Group 是一个官方的论坛,PlantUML 用户可以在这里提问和分享经验。
工具集成
- IDE 和文本编辑器插件:大多数流行的 IDE 和文本编辑器都有 PlantUML 插件,这些插件提供了语法高亮、图形预览和即时渲染等功能,极大地提高了生产力。
学习建议
- 从简单开始:先从创建基本的图表开始,如类图和用例图,然后逐渐尝试更复杂的图表类型。
- 实践为主:通过实际创建图表来学习,将您的学习应用到实际项目中,这样可以更快地掌握 PlantUML。
- 参考示例:查看官方文档中的示例,以及 GitHub 仓库中的测试用例,这些都是学习 PlantUML 语法和功能的好方法。
- 参与社区:加入 PlantUML 的社区,提问、回答问题,分享您的作品,这样可以获得反馈并从他人的经验中学习。
- 持续学习:PlantUML 不断更新和改进,定期查看官方文档和社区论坛,了解最新的功能和最佳实践。