plantUML的使用

类之间的关系

就问你美不美


注释 符号 图释 箭头指向 关系 代码体现
Extension Generalization
(泛化也就是继承)
<l-    image 带三角箭头的实线,箭头指向父类 是一种继承关系,它指定了子类如何特化父类的所有特征和行为
Composition(聚合) o-- image 带空心菱形的实心线,菱形指向整体 是整体与部分的关系 成员变量
Aggregation(组合) *-- image 带实心菱形的实线,菱形指向整体 是整体与部分的关系 成员变量
Realization(实现) ..l> image 带三角箭头的虚线,箭头指向接口 是一种类与接口的关系,表示类是接口所有特征和行为的实现
Association(关联) --> image 带普通箭头的实心线,指向被拥有者 是一种拥有的关系,它使一个类知道另一个类的属性和方法 成员变量
Dependency(依赖) ..> image 带箭头的虚线,指向被使用者 是一种使用的关系,所以要尽量不使用双向的互相依赖 局部变量、方法的参数或者对静态方法的调用

image

各种关系的强弱顺序

  • 泛化(继承) = 实现 > 组合 > 聚合 > 关联 > 依赖

各种类图关系

关系上的标识

添加方法

定义可访问性

符号 字段图标 方法图标 权限
- image image private
# image image protected
~ image image package private
+ image image public
  • 通常情况这样是不容易被理解的

    image

  • 我们可以设置不显示图片,以-#~+来表是,加上这句话skinparam classAttributeIconSize 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
skinparam classAttributeIconSize 0
class Car {
- String driver
+ String oil
+ String say()
# String do()
~ String eat()
- String lov()
}
class bmw implements Car{
+ private drive()
}

image
image

高级类体

  • 可以自己指定分隔符
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
abstract class CarFactory{
.. 此处是属性 ..
{static} String hello :静态属性 下划线
-- 此处是方法 --
- String say()
==此处是抽象方法==
{abstract} void methods() :抽象方法 斜体
}
abstract class CarFactory2{
{static} String hello :静态属性 下划线
- String say()
{abstract} void methods() :抽象方法 斜体
}
abstract class CarFactory3{
{static} String hello :静态属性 下划线
- String say()
{abstract} void methods() :抽象方法 斜体
}

分隔符

  • 代码可以看出来,如果属性不仅跟着类下方写的话,访问权限的图标就会由图片变成-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
abstract class CarFactory<<Car>>{
{abstract} Car build()
}
note left: 我不知道该说啥
class CarBuilder
note right : 我是一个车
class CarBuilder<<Car>> {
}
class Cars{
String word()
}
note top : "hello </br>"
annotation superwarnings
enum Time{
DAYS
HOURS
}
/'设置note的颜色'/
note top of CarBuilder #pink
In java, <size:18>every</size> <u>class</u>
<b>extends</b>
<i>this</i> one.
end note

umlnote

使用泛型

1
2
3
4
class Foo<? extends Element> {
int size()
}
Foo *- Element

image

1
2
3
4
5
6
7
8
9
package "Classic Collections" #DDDDDD {
Object <|-- ArrayList
}
package net.sourceforge.plantuml {
Object <|-- Demo1
Demo1 *- Demo2
}

image

包的样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
scale 750 width
package foo1 <<Node>> {
class Class1
}
package foo2 <<Rect>> {
class Class2
}
package foo3 <<Folder>> {
class Class3
}
package foo4 <<Frame>> {
class Class4
}
package foo5 <<Cloud>> {
class Class5
}
package foo6 <<Database>> {
class Class6
}

image

类之间的关系

1
2
3
4
5
6
7
8
9
10
class Student {
Name
}
Student "0..*" - "1..*" Course
(Student, Course) .. Enrollment
class Enrollment {
drop()
cancel()
}

image

1
2
3
4
5
6
7
8
9
10
class Student {
Name
}
Student "0..*" -- "1..*" Course //决定因素 就在于 是一个-还是--
(Student, Course) . Enrollment
class Enrollment {
drop()
cancel()
}

image

Contents
  1. 1. 类之间的关系
  2. 2. 关系上的标识
  3. 3. 添加方法
  4. 4. 定义可访问性
  5. 5. 高级类体
  6. 6. 使用泛型
  7. 7.
  8. 8. 包的样式
  9. 9. 类之间的关系