使用PlantUml绘制类图2
14. 隐藏字段和函数
@startuml
class Dummy1 {
+myMethods()
}
class Dummy2 {
+hiddenMethod()
}
class Dummy3 <<Serializable>> {
String name
}
'隐藏所有的成员
hide members
'隐藏原型
hide stereotype
show stereotype
'隐藏类名前带圈的
hide <<Serializable>> circle
'显示Dummy1的方法
show Dummy1 methods
'隐藏类
hide Dummy2
'显示<<Serializable>>的字段
show <<Serializable>> fields
@enduml15. 泛型
你可以用 < 和 > 来定义类的泛型。
@startuml
class Foo<? extends Element> {
int size()
}
Foo *- Element
@enduml16. 指定标记
通常标记字符 (C,I,E or A) 用于标记:
类 (classes), 接口( interface) , 枚举( enum)和抽象类( abstract classes)
但是当你想定义原型时,可以增加对应的单个字符及颜色,来定义自己的标记(spot):
@startuml
class System << (S,#FF7700) Singleton >>
class Date << (D,orchid) >>
@enduml17. 包
你可以通过关键词 package 声明包,同时可选的来声明对应的背景色(通过使用 html 色彩代码或名称)。
注意:包可以被定义为嵌套。
@startuml
package "Classic Collections" #DDDDDD {
Object <|-- ArrayList
}
package net.sourceforge.plantuml {
Object <|-- Demo1
Demo1 *- Demo2
}
@enduml18. 包样式
你可以通过以下的命令来设置默认样式:skinparam packageStyle, 或者对包使用对应的模板:
@startuml
scale 750 width
package foo1 <<Node>> {
class Class1
}
package foo2 <<Rectangle>> {
class Class2
}
package foo3 <<Folder>> {
class Class3
}
package foo4 <<Frame>> {
class Class4
}
package foo5 <<Cloud>> {
class Class5
}
package foo6 <<Database>> {
class Class6
}
skinparam packageStyle rectangle
package foo1.foo2 {
}
package foo1.foo2.foo3 {
class Object
}
'你也可以参考下面的示例来定义包之间的连线:
foo1.foo2 +-- foo1.foo2.foo3
@enduml19. 命名空间
@startuml
class BaseClass
namespace net.dummy #DDDDDD {
'默认的命名空间以.开头
.BaseClass <|-- Person
Meeting o-- Person
.BaseClass <|- Meeting
}
namespace net.foo {
'使用其他的命名空间下的类
net.dummy.Person <|- Person
.BaseClass <|-- Person
net.dummy.Meeting o-- Person
}
'一个使用全限定名的类会自动被放置到对应的命名空间
BaseClass <|-- net.unused.Person
@enduml20. 自定义命名空间
使用命令 set namespaceSeparator xxx 你可以自定义命名空间分隔符(“ .”以外的字符)
@startuml
set namespaceSeparator ::
class X1::X2::foo {
some info
}
'禁止自动创建包则可以使用 set namespaceSeparator none.
set namespaceSeparator none
class X1.X2.foo {
some info
}
@enduml21. 棒棒糖接口
需要定义棒棒糖样式的接口时可以遵循以下语法:
• bar ()- foo
• bar ()– foo
• foo -() bar
棒棒糖头就是接口。
@startuml
class foo
bar ()- foo
@enduml22. 改变箭头方向
类之间默认采用两个破折号 -- 显示出垂直方向的线.
要得到水平方向的可以像这样使用单破折号 (或者点):
@startuml
Room o- Student
Room *-- Chair
'你也可以通过改变倒置链接来改变方向
Student2 -o Room2
Chair2 --* Room2
'也可通过在箭头内部使用关键字,
'例如 left, right, up 或者 down,来改变方向
foo -left-> dummyLeft
foo -right-> dummyRight
foo -up-> dummyUp
foo -down-> dummyDown
@enduml23. 关系类
你可以在定义了两个类之间的关系后定义一个关系类(association class) 例如:
@startuml
class Student {
Name
}
Student "0..*" - "1..*" Course
(Student, Course) .. Enrollment
class Enrollment {
drop()
cancel()
}
'也可以用另一种方式:
class Student2 {
Name
}
Student2 "0..*" -- "1..*" Course2
(Student2, Course2) . Enrollment2
class Enrollment2 {
drop()
cancel()
}
@enduml24. 皮肤参数1
用 skinparam 改变字体和颜色。
可以在如下场景中使用:
• 在图示的定义中,
• 在引入的文件中,
• 在命令行或者 ANT 任务提供的配置文件中。
@startuml
skinparam class {
'背景颜色
BackgroundColor PaleGreen
'箭头颜色
ArrowColor SeaGreen
'边框颜色
BorderColor SpringGreen
}
'原型C的背景颜色
skinparam stereotypeCBackgroundColor YellowGreen
Class01 "1" *-- "many" Class02 : contains
Class03 o-- Class04 : aggregation
@enduml25. 皮肤颜色2
@startuml
'You can define specific color and fonts for stereotyped classes.
skinparam class {
BackgroundColor PaleGreen
ArrowColor SeaGreen
BorderColor SpringGreen
BackgroundColor<<Foo>> Wheat
BorderColor<<Foo>> Tomato
}
skinparam stereotypeCBackgroundColor YellowGreen
skinparam stereotypeCBackgroundColor<< Foo >> DimGray
Class01 <<Foo>>
Class03 <<Foo>>
Class01 "1" *-- "many" Class02 : contains
Class03 o-- Class04 : aggregation
@enduml26. 辅助布局
有时候,默认布局并不完美…
你可以使用 together 关键词将某些类进行分组:
布局引擎会尝试将它们捆绑在一起(如同在一个包(package) 内)
你也可以使用建立隐藏链接的方式来强制布局。
@startuml
class Bar1
class Bar2
together {
class Together1
class Together2
class Together3
}
Together1 - Together2
Together2 - Together3
Together2 -[hidden]--> Bar1
Bar1 -[hidden]> Bar2
@enduml