类图
类图描述系统的静态结构:类、它们的属性和方法,以及类之间的关系。它是文档化代码组织与设计时最常用的 UML 图。 在 PlantUML 中,语法与编程语言相近,因此属性、方法和可见性标记都能自然写出。表示关系的箭头与时序图采用相同的风格。- 文本输入,图形输出。 用几行代码声明类、字段和关系。
- 像代码一样可读。
+、-、#表示可见性,:表示类型,()表示方法。 - 自由添加注解。 注释、颜色和构造型都可以直接写在文本中。
元素声明
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--
|
部分可以独立于整体而存在 |
| 依赖性 |
-->
|
对象使用另一个对象 |
| 依赖 |
..>
|
一种较弱的依赖形式 |
.. 来代替-- ,会显示为虚线。
示例:
WARNING
This translation need to be updated. WARNING
关系上的标签
在关系之间使用标签来说明时, 使用 :后接
标签文字。
对元素的说明,你可以在每一边使用 ""
来说明.
< 或 >以表明是哪个对象作用到哪个对象上。
在元素名称和关系标签中使用非字母
如果你想在类(或枚举...)的显示名称中使用非字母,你可以:
- 在类定义中使用
as关键字来指定一个别名 - 在类名称周围加上引号
""
以$
开始的名称注意,以$ 开始的名称以后不能被隐藏或删除,因为hide 和remove 命令会认为该名称是$tag 而不是一个组件名称。要想以后删除这些元素,它们必须有一个别名或必须被标记。
$ 开始的名字是有效的,但是要给这样的元素分配一个别名,必须把名字放在引号"" 之间。
添加方法
要声明属性和方法,你可以使用符号:,后面跟字段或方法的名称。
编译器会通过检查括号来选择方法和字段。
{} 为所有属性和方法分组。
注意,语法对类型/名称的顺序有很大的灵活性。
{field}和{method}修饰符来覆盖编译器对属性和方法的默认识别。
定义能见度(可访问性)
当你定义属性或者方法时,你可以使用特殊符号定义相应条目的可访问性质。
| 字符 | 图标(属性) | 图标(方法) | 可访问性 |
-
|
|
|
private 私有
|
#
|
|
|
protected 受保护
|
~
|
|
|
package private 包内可见
|
+
|
|
|
public 公有
|
skinparam classAttributeIconSize 0 来展示特殊符号本身:
WARNING
This translation need to be updated. WARNING
Visibility on compositions and aggregations
抽象与静态
通过修饰符{static}或者{abstract},可以定义静态或者抽象的方法或者属性。
这些修饰符可以写在行的开始或者结束。也可以使用{classifier}这个修饰符来代替{static}.
高级类体
PlantUML默认自动将方法和属性重新分组,你可以自己定义分隔符来重排方法和属性,下面的分隔符都是可用的:-- .. == __.
还可以在分隔符中添加标题:
备注和版型
版型通过类关键字("<<"和">>")来定义
你可以使用note left of , note right of , note top of , note bottom of这些关键字来添加备注。
你还可以在类的声明末尾使用note left, note right,note top, note bottom来添加。
此外,单独用note这个关键字也是可以的,使用 .. 符号可以作出一条连接它与其它对象的虚线。
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 来定义注释。
WARNING
This translation need to be updated. WARNING
注释属性 (field, attribute, member) 或方法
可以在属性(field、attribute、member)或方法上添加注释。
⚠ 注意
- 不能与
top和bottom同时使用 (只支持left和right) - 不能与表示命名空间的分隔符
::同时使用
注释属性或方法
给同名方法注释
WARNING
This translation need to be updated. WARNING
链接的注释
在定义链接之后,你可以用 note on link 给链接添加注释
如果想要改变注释相对于标签的位置,你也可以用 note left on link, note right on link, note bottom on link。(对应位置分别在label的左边,右边,下边)
抽象类和接口
用关键字abstract或abstract class来定义抽象类。
抽象类用斜体显示。
也可以使用interface, annotation 和 enum 等关键字。
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 命令来定义相关规则和例外。
WARNING
This translation need to be updated. WARNING
隐藏类
你也可以使用 show/hide 命令来隐藏类
如果你定义了一个大的!included 文件,且想在文件包含之后隐藏部分类,该功能会很有帮助。
WARNING
This translation need to be updated. WARNING
删除类
您还可以使用remove命令来删除类。
如果您定义了一个大的 [!included file](预处理),
并且如果您想在 [file contains](预处理)之后删除一些类,这可能很有用。
隐藏、删除或还原标记元素或通配符
您可以在元素上放置$tags (使用$ ),然后单独或按标记删除、隐藏或还原组件。
默认情况下,所有组件都会显示:
hide $tag13组件:
- 或
remove $tag13组件:
- 或
remove $tag13 and restore $tag1组件:
- 或
remove * and restore $tag1组件:
隐藏或删除未关联的类
默认情况下, 所有的类都将会展示:
hide @unlinked来隐藏未关联的类:
- 或者使用
remove @unlinked来删除未关联的类:
泛型(generics)
你可以用 < 和 > 来定义类的泛型。
skinparam genericDisplay old command.
指定标记(Spot)
通常标记字符 (C, I, E or A) 用于标记 类(classes),
接口(interface), 枚举(enum)和 抽象类(abstract classes).
但是当你想定义原型时,可以增加对应的单个字符及颜色,来定义自己的标记(spot),就像下面一样:
包
你可以通过关键词 package 声明包,同时可选的来声明对应的背景色(通过使用html色彩代码或名称)。
注意:包可以被定义为嵌套。
WARNING
This translation need to be updated. WARNING
包样式
包可以定义不同的样式。
你可以通过以下的命令来设置默认样式 : skinparam packageStyle,或者对包使用对应的模板:
命名空间(Namespaces)
在使用包(package)时(区别于命名空间),类名是类的唯一标识。
也就意味着,在不同的包(package)中的类,不能使用相同的类名。
在那种情况下(译注:同名、不同全限定名类),你应该使用命名空间来取而代之。
你可以从其他命名空间,使用全限定名来引用类,
默认命名空间(译注:无名的命名空间)下的类,以一个“."开头(的类名)来引用(译注:示例中的BaseClass).
注意:你不用显示地创建命名空间:一个使用全限定名的类会自动被放置到对应的命名空间。
WARNING
This translation need to be updated. WARNING
自动创建命名空间
使用命令 set namespaceSeparator ??? 你可以自定义命名空间分隔符(为 “.” 以外的字符).
set namespaceSeparator none.
WARNING
This translation need to be updated. WARNING
棒棒糖接口
需要定义棒棒糖样式的接口时可以遵循以下语法:
bar ()- foobar ()-- foofoo -() bar
改变箭头方向
类之间默认采用两个破折号 -- 显示出垂直
方向的线. 要得到水平方向的可以像这样使用单破折号 (或者点):
left, right, up
或者 down,来改变方向
-d- 而不是
-down-) 或前两个字符 (-do-)。
请注意,您不应滥用此功能:Graphviz 通常无需调整即可提供良好的结果。
同时也支持 left to right direction 参数:
WARNING
This translation need to be updated. WARNING
“关系”类
你可以在定义了两个类之间的关系后定义一个 关系类 association class 例如:
同级关联(Association on same classe)
WARNING
This translation need to be updated. WARNING
样式参数
用skinparam改变字体和颜色。
可以在如下场景中使用:
模板样式
你可以给模型自定义颜色和字体(You can define specific color and fonts for stereotyped classes.)
- `BackgroundColor_<<Foo>> Wheat`
- `skinparam stereotypeCBackgroundColor_<<Foo>> DimGray`
WARNING
This translation need to be updated. WARNING
渐变颜色
你可以使用 # 号为类、注释等等自定义颜色。
在自定义颜色中你可以使用标准颜色的名称 或 RGB 编码,参见: Colors.
你同样可以使用下面的语法为背景色声明为渐变的颜色:
渐变的两个颜色可以使用下面的符号分割:
|,/,\,-,
辅助布局
有时候,默认布局并不完美...
你可以使用 together 关键词将某些类进行分组:
布局引擎会尝试将它们捆绑在一起(如同在一个包(package)内)
你也可以使用建立 hidden 链接的方式来强制布局
拆分大文件
有些情况下,会有一些很大的图片文件。
可以用 page (hpages)x(vpages) 这个命令把生成的图片文件拆分成若干个文件。
hpages 用来表示水平方向页面数,
and vpages 用来表示垂直方面页面数。
你也可以使用特定的皮肤设定来给分页添加边框(见例子)
继承(Extends) 和 实现(implements)
同样可使用 extends 和 implements 关键词.
WARNING
This translation need to be updated. WARNING
方括号表示关系(连接或箭头)的样式
线样式
可以明确的使用bold, dashed, dotted, hidden 或 plain 来表示关系, 连接或箭头:- 没有标签
- 有标签
线颜色
线宽度
混合样式
改变关系(线和箭头)的颜色和样式(单行样式)
你可以改变表示关系的线和箭头的颜色或样式,使用下面的单行样式格式:
#color;line.[bold|dashed|dotted];text:color
改变类颜色和样式 (单行样式)
你可以改变定义类的 颜色 或样式, 通过下面两种指定格式:
#color ##[style]color
#color)表示背景色,然后第二个表示线的样式和颜色(##[style]color)
#[color|back:color];header:color;line:color;line.[bold|dashed|dotted];text:color
类成员的箭头方向(Arrows from/to class members)
分组继承关系(Grouping inheritance arrow heads)
你可以用skinparam groupInheritance关键字合并泛化箭头, 后接参数合并阈值(从几个继承类时开始合并)。
GroupInheritance 1 (不合并)
GroupInheritance 2 (从2个组开始合并)
GroupInheritance 3 (从3个组开始合并)
GroupInheritance 4 (从4个组开始合并)
Display JSON Data on Class or Object diagram
Simple example
Packages and Namespaces Enhancement
[From V1.2023.2+, and V1.2023.5]
Qualified associations
Minimal example
Another example
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.
With Smetana (internal layout engine)
The main rule is the opposite: Simple element first, then nested element.
Left to right
With Graphviz (layout engine by default)
With Smetana (internal layout engine)
Role label to associations