类图
类图描述系统的静态结构:类、它们的属性和方法,以及类之间的关系。它是文档化代码组织与设计时最常用的 UML 图。 在 PlantUML 中,语法与编程语言相近,因此属性、方法和可见性标记都能自然写出。表示关系的箭头与时序图采用相同的风格。- 文本输入,图形输出。 用几行代码声明类、字段和关系。
- 像代码一样可读。
+、-、#表示可见性,:表示类型,()表示方法。 - 自由添加注解。 注释、颜色和构造型都可以直接写在文本中。
元素声明
|
🎉 Copied!
|
|
[参考
protocol 和 struct:GH-1028, 对于exception:QA-16258]
[Ref. for protocol and struct: GH-1028, for exception: QA-16258, for record and dataclass: GH-2232]
[Ref. for protocol and struct: GH-1028; for exception: GH-1056, QA-16258; for metaclass and stereotype: GH-1159, QA-16784; for record and dataclass: GH-2232]
WARNING
This translation need to be updated. WARNING
类之间的关系
类之间的关系是用以下符号定义的。
| 类型 | 符号 | 目的 |
| 扩展 |
<|--
|
类在层次结构中的特化 |
| 实现 |
<|..
|
通过类实现接口 |
| 构成 |
*--
|
没有整体就没有部分 |
| 聚合 |
o--
|
部分可以独立于整体而存在 |
| 依赖性 |
-->
|
对象使用另一个对象 |
| 依赖 |
..>
|
一种较弱的依赖形式 |
.. 来代替-- ,会显示为虚线。
示例:
|
🎉 Copied!
|
|
|
🎉 Copied!
|
|
|
🎉 Copied!
|
|
WARNING
This translation need to be updated. WARNING
关系上的标签
在关系之间使用标签来说明时, 使用 :后接
标签文字。
对元素的说明,你可以在每一边使用 ""
来说明.
|
🎉 Copied!
|
|
在标签的开始或结束位置添加
< 或 >以表明是哪个对象作用到哪个对象上。
|
🎉 Copied!
|
|
在元素名称和关系标签中使用非字母
如果你想在类(或枚举...)的显示名称中使用非字母,你可以:
- 在类定义中使用
as关键字来指定一个别名 - 在类名称周围加上引号
""
|
🎉 Copied!
|
|
如果一个别名被分配给一个元素,文件的其余部分必须用别名而不是名称来指代该元素。
以$
开始的名称注意,以$ 开始的名称以后不能被隐藏或删除,因为hide 和remove 命令会认为该名称是$tag 而不是一个组件名称。要想以后删除这些元素,它们必须有一个别名或必须被标记。
|
🎉 Copied!
|
|
还要注意的是,以$ 开始的名字是有效的,但是要给这样的元素分配一个别名,必须把名字放在引号"" 之间。
添加方法
要声明属性和方法,你可以使用符号:,后面跟字段或方法的名称。
编译器会通过检查括号来选择方法和字段。
|
🎉 Copied!
|
|
可用花括号
{} 为所有属性和方法分组。
注意,语法对类型/名称的顺序有很大的灵活性。
|
🎉 Copied!
|
|
你可以使用
{field}和{method}修饰符来覆盖编译器对属性和方法的默认识别。
|
🎉 Copied!
|
|
定义能见度(可访问性)
当你定义属性或者方法时,你可以使用特殊符号定义相应条目的可访问性质。
| 字符 | 图标(属性) | 图标(方法) | 可访问性 |
-
|
|
|
private 私有
|
#
|
|
|
protected 受保护
|
~
|
|
|
package private 包内可见
|
+
|
|
|
public 公有
|
|
🎉 Copied!
|
|
你可以采用命令
skinparam classAttributeIconSize 0 来展示特殊符号本身:
|
🎉 Copied!
|
|
*[Ref. [QA-4755](https://forum.plantuml.net/4755/provide-display-visibility-attributes-private-protected)]*
WARNING
This translation need to be updated. WARNING
Visibility on compositions and aggregations
|
🎉 Copied!
|
|
[Ref. QA-8294]
抽象与静态
通过修饰符{static}或者{abstract},可以定义静态或者抽象的方法或者属性。
这些修饰符可以写在行的开始或者结束。也可以使用{classifier}这个修饰符来代替{static}.
|
🎉 Copied!
|
|
高级类体
PlantUML默认自动将方法和属性重新分组,你可以自己定义分隔符来重排方法和属性,下面的分隔符都是可用的:-- .. == __.
还可以在分隔符中添加标题:
|
🎉 Copied!
|
|
备注和版型
版型通过类关键字("<<"和">>")来定义
你可以使用note left of , note right of , note top of , note bottom of这些关键字来添加备注。
你还可以在类的声明末尾使用note left, note right,note top, note bottom来添加。
此外,单独用note这个关键字也是可以的,使用 .. 符号可以作出一条连接它与其它对象的虚线。
|
🎉 Copied!
|
|
WARNING
This translation need to be updated. WARNING
备注中的更多功能
可以在注释中使用部分html标签 (See Creole expression):
<b><u><i><s>,<del>,<strike><font color="#AAAAAA">or<font color="colorName"><color:#AAAAAA>or<color:colorName><size:nn>to change font size<img src="file">or<img:file>: the file must be accessible by the filesystem
note left, note right,
note top, note bottom 来定义注释。
|
🎉 Copied!
|
|
WARNING
This translation need to be updated. WARNING
注释属性 (field, attribute, member) 或方法
可以在属性(field、attribute、member)或方法上添加注释。
⚠ 注意
- 不能与
top和bottom同时使用 (只支持left和right) - 不能与表示命名空间的分隔符
::同时使用
注释属性或方法
|
🎉 Copied!
|
|
给同名方法注释
|
🎉 Copied!
|
|
[Ref. QA-3474 and QA-5835]
WARNING
This translation need to be updated. WARNING
链接的注释
在定义链接之后,你可以用 note on link 给链接添加注释
如果想要改变注释相对于标签的位置,你也可以用 note left on link, note right on link, note bottom on link。(对应位置分别在label的左边,右边,下边)
|
🎉 Copied!
|
|
抽象类和接口
用关键字abstract或abstract class来定义抽象类。
抽象类用斜体显示。
也可以使用interface, annotation 和 enum 等关键字。
|
🎉 Copied!
|
|
*[参考: '标注和成员' Issue#458]*
WARNING
This translation need to be updated. WARNING
隐藏属性、函数等
通过使用命令“hide/show”,你可以用参数表示类的显示方式。
基础命令是: hide empty members. 这个命令会隐藏空白的方法和属性。
除 empty members 外,你可以用:
empty fields或者empty attributes空属性,empty methods空函数,fields或attributes隐藏字段或属性,即使是被定义了methods隐藏方法,即使是被定义了members隐藏字段 和 方法,即使是被定义了circle类名前带圈的,stereotype原型。
hide 或 show 关键词,对以下内容进行设置:
class所有类,interface所有接口,enum所有枚举,<<foo1>>实现 foo1 的类,- 一个既定的类名。
show/hide 命令来定义相关规则和例外。
|
🎉 Copied!
|
|
*[Ref. [QA-2913](https://forum.plantuml.net/2913/hiding-based-on-visibilty?show=2916#a2916)]*
WARNING
This translation need to be updated. WARNING
隐藏类
你也可以使用 show/hide 命令来隐藏类
如果你定义了一个大的!included 文件,且想在文件包含之后隐藏部分类,该功能会很有帮助。
|
🎉 Copied!
|
|
WARNING
This translation need to be updated. WARNING
删除类
您还可以使用remove命令来删除类。
如果您定义了一个大的 [!included file](预处理),
并且如果您想在 [file contains](预处理)之后删除一些类,这可能很有用。
|
🎉 Copied!
|
|
隐藏、删除或还原标记元素或通配符
您可以在元素上放置$tags (使用$ ),然后单独或按标记删除、隐藏或还原组件。
默认情况下,所有组件都会显示:
|
🎉 Copied!
|
|
但您可以:
hide $tag13组件:
|
🎉 Copied!
|
|
- 或
remove $tag13组件:
|
🎉 Copied!
|
|
- 或
remove $tag13 and restore $tag1组件:
|
🎉 Copied!
|
|
- 或
remove * and restore $tag1组件:
|
🎉 Copied!
|
|
隐藏或删除未关联的类
默认情况下, 所有的类都将会展示:
|
🎉 Copied!
|
|
不过你可以使用:
hide @unlinked来隐藏未关联的类:
|
🎉 Copied!
|
|
- 或者使用
remove @unlinked来删除未关联的类:
|
🎉 Copied!
|
|
[Adapted from QA-11052]
泛型(generics)
你可以用 < 和 > 来定义类的泛型。
|
🎉 Copied!
|
|
It is possible to disable this drawing using
skinparam genericDisplay old command.
指定标记(Spot)
通常标记字符 (C, I, E or A) 用于标记 类(classes),
接口(interface), 枚举(enum)和 抽象类(abstract classes).
但是当你想定义原型时,可以增加对应的单个字符及颜色,来定义自己的标记(spot),就像下面一样:
|
🎉 Copied!
|
|
包
你可以通过关键词 package 声明包,同时可选的来声明对应的背景色(通过使用html色彩代码或名称)。
注意:包可以被定义为嵌套。
|
🎉 Copied!
|
|
WARNING
This translation need to be updated. WARNING
包样式
包可以定义不同的样式。
你可以通过以下的命令来设置默认样式 : skinparam packageStyle,或者对包使用对应的模板:
|
🎉 Copied!
|
|
你也可以参考下面的示例来定义包之间的连线:
|
🎉 Copied!
|
|
命名空间(Namespaces)
在使用包(package)时(区别于命名空间),类名是类的唯一标识。
也就意味着,在不同的包(package)中的类,不能使用相同的类名。
在那种情况下(译注:同名、不同全限定名类),你应该使用命名空间来取而代之。
你可以从其他命名空间,使用全限定名来引用类,
默认命名空间(译注:无名的命名空间)下的类,以一个“."开头(的类名)来引用(译注:示例中的BaseClass).
注意:你不用显示地创建命名空间:一个使用全限定名的类会自动被放置到对应的命名空间。
|
🎉 Copied!
|
|
There won't be any difference between namespaces and packages anymore: both keywords are now synonymous. There won't be any difference between ``namespaces`` and ``packages`` anymore: both keywords are now synonymous.
WARNING
This translation need to be updated. WARNING
自动创建命名空间
使用命令 set namespaceSeparator ??? 你可以自定义命名空间分隔符(为 “.” 以外的字符).
|
🎉 Copied!
|
|
禁止自动创建包则可以使用
set namespaceSeparator none.
|
🎉 Copied!
|
|
WARNING
This translation need to be updated. WARNING
棒棒糖接口
需要定义棒棒糖样式的接口时可以遵循以下语法:
bar ()- foobar ()-- foofoo -() bar
|
🎉 Copied!
|
|
改变箭头方向
类之间默认采用两个破折号 -- 显示出垂直
方向的线. 要得到水平方向的可以像这样使用单破折号 (或者点):
|
🎉 Copied!
|
|
你也可以通过改变倒置链接来改变方向
|
🎉 Copied!
|
|
也可通过在箭头内部使用关键字, 例如
left, right, up
或者 down,来改变方向
|
🎉 Copied!
|
|
您可以使用缩写形式来表示方向,第一个字符(例如,
-d- 而不是
-down-) 或前两个字符 (-do-)。
请注意,您不应滥用此功能:Graphviz 通常无需调整即可提供良好的结果。
同时也支持 left to right direction 参数:
|
🎉 Copied!
|
|
WARNING
This translation need to be updated. WARNING
“关系”类
你可以在定义了两个类之间的关系后定义一个 关系类 association class 例如:
|
🎉 Copied!
|
|
也可以用另一种方式:
|
🎉 Copied!
|
|
同级关联(Association on same classe)
|
🎉 Copied!
|
|
[参考: Incubation: Associations]
WARNING
This translation need to be updated. WARNING
样式参数
用skinparam改变字体和颜色。
可以在如下场景中使用:
|
🎉 Copied!
|
|
模板样式
你可以给模型自定义颜色和字体(You can define specific color and fonts for stereotyped classes.)
|
🎉 Copied!
|
|
Any of the spaces shown as `_` below will cause all skinparams to be ignored, see [discord discussion](https://discord.com/channels/1083727021328306236/1289954399321329755/1289967399302467614) and [issue #1932](https://github.com/plantuml/plantuml/issues/1932):
- `BackgroundColor_<<Foo>> Wheat`
- `skinparam stereotypeCBackgroundColor_<<Foo>> DimGray`
WARNING
This translation need to be updated. WARNING
渐变颜色
你可以使用 # 号为类、注释等等自定义颜色。
在自定义颜色中你可以使用标准颜色的名称 或 RGB 编码,参见: Colors.
你同样可以使用下面的语法为背景色声明为渐变的颜色:
渐变的两个颜色可以使用下面的符号分割:
|,/,\,-,
|
🎉 Copied!
|
|
辅助布局
有时候,默认布局并不完美...
你可以使用 together 关键词将某些类进行分组:
布局引擎会尝试将它们捆绑在一起(如同在一个包(package)内)
你也可以使用建立 hidden 链接的方式来强制布局
|
🎉 Copied!
|
|
拆分大文件
有些情况下,会有一些很大的图片文件。
可以用 page (hpages)x(vpages) 这个命令把生成的图片文件拆分成若干个文件。
hpages 用来表示水平方向页面数,
and vpages 用来表示垂直方面页面数。
你也可以使用特定的皮肤设定来给分页添加边框(见例子)
|
🎉 Copied!
|
|
继承(Extends) 和 实现(implements)
同样可使用 extends 和 implements 关键词.
|
🎉 Copied!
|
|
*[Ref. [QA-2239](https://forum.plantuml.net/2239/is-multiple-inheritance-or-implementation-possible)]*
WARNING
This translation need to be updated. WARNING
方括号表示关系(连接或箭头)的样式
线样式
可以明确的使用bold, dashed, dotted, hidden 或 plain 来表示关系, 连接或箭头:- 没有标签
|
🎉 Copied!
|
|
- 有标签
|
🎉 Copied!
|
|
[改编自 QA-4181]
线颜色
|
🎉 Copied!
|
|
线宽度
|
🎉 Copied!
|
|
[参考: QA-4949]
混合样式
|
🎉 Copied!
|
|
改变关系(线和箭头)的颜色和样式(单行样式)
你可以改变表示关系的线和箭头的颜色或样式,使用下面的单行样式格式:
#color;line.[bold|dashed|dotted];text:color
|
🎉 Copied!
|
|
[See similar feature on deployment]
改变类颜色和样式 (单行样式)
你可以改变定义类的 颜色 或样式, 通过下面两种指定格式:
#color ##[style]color
#color)表示背景色,然后第二个表示线的样式和颜色(##[style]color)
|
🎉 Copied!
|
|
[参考: QA-1487]
#[color|back:color];header:color;line:color;line.[bold|dashed|dotted];text:color
|
🎉 Copied!
|
|
第一个原始示例:
|
🎉 Copied!
|
|
[参考. QA-3770]
类成员的箭头方向(Arrows from/to class members)
|
🎉 Copied!
|
|
[参考: QA-3636]
|
🎉 Copied!
|
|
[参考: QA-5261]
分组继承关系(Grouping inheritance arrow heads)
你可以用skinparam groupInheritance关键字合并泛化箭头, 后接参数合并阈值(从几个继承类时开始合并)。
GroupInheritance 1 (不合并)
|
🎉 Copied!
|
|
GroupInheritance 2 (从2个组开始合并)
|
🎉 Copied!
|
|
GroupInheritance 3 (从3个组开始合并)
|
🎉 Copied!
|
|
GroupInheritance 4 (从4个组开始合并)
|
🎉 Copied!
|
|
[参考: QA-3193, 和 QA-13532]
Display JSON Data on Class or Object diagram
Simple example
|
🎉 Copied!
|
|
[Ref. QA-15481] For another example, see on JSON page.
Packages and Namespaces Enhancement
[From V1.2023.2+, and V1.2023.5]
|
🎉 Copied!
|
|
|
🎉 Copied!
|
|
|
🎉 Copied!
|
|
|
🎉 Copied!
|
|
[Ref. GH-1352]
Qualified associations
Minimal example
|
🎉 Copied!
|
|
[Ref. QA-16397, GH-1467]
Another example
|
🎉 Copied!
|
|
Change diagram orientation
You can change (whole) diagram orientation with:
top to bottom direction(by default)left to right direction
Top to bottom (by default)
With Graphviz (layout engine by default)
The main rule is: Nested element first, then simple element.
|
🎉 Copied!
|
|
With Smetana (internal layout engine)
The main rule is the opposite: Simple element first, then nested element.
|
🎉 Copied!
|
|
Left to right
With Graphviz (layout engine by default)
|
🎉 Copied!
|
|
With Smetana (internal layout engine)
|
🎉 Copied!
|
|
Role label to associations
|
🎉 Copied!
|
|
[Ref. GH-2536, GH-2537]