1、plant UML語法學習小結css
1.類之間的關係html
使用..
來代替 --
能夠獲得點 線.java
在這些規則下,也能夠繪製下列圖形shell
@startuml
Class01 <|-- Class02 Class03 *-- Class04 Class05 o-- Class06 Class07 .. Class08 Class09 -- Class10 @enduml
在關係之間使用標籤來講明時, 使用 :
後接 標籤文字。ide
對元素的說明,你能夠在每一邊使用 ""
來講明.函數
@startuml Class01 "1" *-- "many" Class02 : contains Class03 o-- Class04 : aggregation Class05 --> "1" Class06 @enduml
在標籤的開始或結束位置添加 或 以代表是哪一個對象做用到哪一個對象上。<>
@startuml class Car Driver - Car : drives > Car *- Wheel : have 4 > Car -- Person : < owns @enduml
爲了聲明域或者方法,你可使用 後接域名或方法名。學習
系統檢查是否有括號來判斷是方法仍是域。字體
@startuml Object <|-- ArrayList Object : equals() ArrayList : Object[] elementData ArrayList : size() @enduml
也可使用 把域或者方法括起來{}
注意,這種語法對於類型/名字的順序是很是靈活的。this
@startuml class Dummy { String data void methods() } class Flight { flightNumber : Integer departureTime : Date } @enduml
You can use {field}
and {method}
modifiers to override default behaviour of the parser about fields and methods.spa
@startuml class Dummy { {field} A field (despite parentheses) {method} Some method } @enduml
一旦你定義了域或者方法,你能夠定義 相應條目的可訪問性質。
Character | Icon for field | Icon for method | Visibility |
- |
private | ||
# |
protected | ||
~ |
package private | ||
+ |
public |
@startuml class Dummy { -field1 #field2 ~method1() +method2() } @enduml
你能夠採用如下命令停用這些特性 skinparam classAttributeIconSize 0
:
@startuml skinparam classAttributeIconSize 0 class Dummy { -field1 #field2 ~method1() +method2() } @enduml
經過修飾符{static}
或者{abstract}
,能夠定義靜態或者抽象的方法或者屬性。
這些修飾符能夠寫在行的開始或者結束。也可使用{classifier}
這個修飾符來代替{static}
.
@startuml class Dummy { {static} String id {abstract} void methods() } @enduml
PlantUML默認自動將方法和屬性從新分組,你能夠本身定義分隔符來重排方法和屬性,下面的分隔符都是可用的:--
..
==
__
.
還能夠在分隔符中添加標題:
@startuml class Foo1 { You can use several lines .. as you want and group == things together. __ You can have as many groups as you want -- End of class } class User { .. Simple Getter .. + getName() + getAddress() .. Some setter .. + setName() __ private data __ int age -- encrypted -- String password } @enduml
模板經過類關鍵字("<<"和">>")來定義
你可使用note left of
, note right of
, note top of
, note bottom of
這些關鍵字來添加備註。
你還能夠在類的聲明末尾使用note left
, note right
,note top
, note bottom
來添加備註。
此外,單獨用note
這個關鍵字也是能夠的,使用 ..
符號能夠做出一條鏈接它與其它對象的虛線。
@startuml class Object << general >> Object <|--- ArrayList note top of Object : In java, every class\nextends this one. note "This is a floating note" as N1 note "This note is connected\nto several objects." as N2 Object .. N2 N2 .. ArrayList class Foo note left: On last defined class @enduml
8.更多註釋
能夠在註釋中使用部分html標籤:
<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你也能夠在註釋中展現多行。
你也能夠在定義的class以後直接使用 note left
, note right
, note top
, note bottom
來定義註釋。
@startuml class Foo note left: On last defined class note top of Object In java, <size:18>every</size> <u>class</u> <b>extends</b> <i>this</i> one. end note note as N1 This note is <u>also</u> <b><color:royalBlue>on several</color> <s>words</s> lines And this is hosted by <img:sourceforge.jpg> end note @enduml
在定義連接以後,你能夠用 note on link
給連接添加註釋
若是想要改變註釋相對於標籤的位置,你也能夠用 note left on link
, note right on link
, note bottom on link
。(對應位置分別在label的左邊,右邊,下邊)
@startuml class Dummy Dummy --> Foo : A link note on link #red: note that is red Dummy --> Foo2 : Another link note right on link #blue this is my note on right link and in blue end note @enduml
用關鍵字abstract
或abstract class
來定義抽象類。抽象類用斜體顯示。 也可使用interface
, annotation
和 enum
關鍵字。
@startuml abstract class AbstractList abstract AbstractCollection interface List interface Collection List <|-- AbstractList Collection <|-- AbstractCollection Collection <|- List AbstractCollection <|- AbstractList AbstractList <|-- ArrayList class ArrayList { Object[] elementData size() } enum TimeUnit { DAYS HOURS MINUTES } annotation SuppressWarnings @enduml
若是你想在類(或者枚舉)的顯示中使用非字母符號,你能夠:
as
關鍵字""
@startuml class "This is my class" as class1 class class2 as "It works this way too" class2 *-- "foo/dummy" : use @enduml
經過使用命令「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
命令來定義相關規則和例外。
@startuml class Dummy1 { +myMethods() } class Dummy2 { +hiddenMethod() } class Dummy3 <<Serializable>> { String name } hide members hide <<Serializable>> circle show Dummy1 methods show <<Serializable>> fields @enduml
你也可使用 show/hide
命令來隱藏類
若是你定義了一個大的!included 文件,且想在文件包含以後隱藏部分類,該功能會頗有幫助。
@startuml class Foo1 class Foo2 Foo2 *-- Foo1 hide Foo2 @enduml
你能夠用 <
和 >
來定義類的泛型。
@startuml class Foo<? extends Element> { int size() } Foo *- Element @enduml
It is possible to disable this drawing using skinparam genericDisplay old
command.
你能夠經過關鍵詞 package
聲明包,同時可選的來聲明對應的背景色(經過使用html色彩代碼或名稱)。
注意:包能夠被定義爲嵌套。
@startuml package "Classic Collections" #DDDDDD { Object <|-- ArrayList } package net.sourceforge.plantuml { Object <|-- Demo1 Demo1 *- Demo2 } @enduml
包能夠定義不一樣的樣式。
你能夠經過如下的命令來設置默認樣式 : 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 } @enduml
你也能夠參考下面的示例來定義包之間的連線:
@startuml skinparam packageStyle rectangle package foo1.foo2 { } package foo1.foo2.foo3 { class Object } foo1.foo2 +-- foo1.foo2.foo3 @enduml
In packages, the name of a class is the unique identifier of this class. It means that you cannot have two classes with the very same name in different packages.
In that case, you should use namespacesinstead of packages.
You can refer to classes from other namespaces by fully qualify them. Classes from the default namespace are qualified with a starting dot.
Note that you don't have to explicitly create namespace : a fully qualified class is automatically put in the right namespace.
@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 @enduml
18.自動建立命名空間
使用命令 set namespaceSeparator ???
你能夠自定義命名空間分隔符(爲 「.」 之外的字符).
@startuml set namespaceSeparator :: class X1::X2::foo { some info } @enduml
禁止自動建立包則可使用 set namespaceSeparator none
.
@startuml set namespaceSeparator none class X1.X2.foo { some info } @enduml
須要定義棒棒糖樣式的接口時能夠遵循如下語法:
bar ()- foo
bar ()-- foo
foo -() bar
@startuml class foo bar ()- foo @enduml
類之間默認採用兩個破折號 --
顯示出垂直 方向的線. 要獲得水平方向的能夠像這樣使用單破折號 (或者點):
@startuml Room o- Student Room *-- Chair @enduml
你也能夠經過改變倒置連接來改變方向
@startuml Student -o Room Chair --* Room @enduml
也可經過在箭頭內部使用關鍵字, 例如left
, right
, up
或者 down
,來改變方向
@startuml foo -left-> dummyLeft foo -right-> dummyRight foo -up-> dummyUp foo -down-> dummyDown @enduml
You can shorten the arrow by using only the first character of the direction (for example, -d-
instead of -down-
) or the two first characters (-do-
).
Please note that you should not abuse this functionality : Graphviz gives usually good results without tweaking.
你能夠在定義了兩個類之間的關係後定義一個 關係類 association class 例如:
@startuml class Student { Name } Student "0..*" - "1..*" Course (Student, Course) .. Enrollment class Enrollment { drop() cancel() } @enduml
也能夠用另外一種方式:
@startuml class Student { Name } Student "0..*" -- "1..*" Course (Student, Course) . Enrollment class Enrollment { drop() cancel() } @enduml
用skinparam
改變字體和顏色。
能夠在以下場景中使用:
@startuml skinparam class { BackgroundColor PaleGreen ArrowColor SeaGreen BorderColor SpringGreen } skinparam stereotypeCBackgroundColor YellowGreen Class01 "1" *-- "many" Class02 : contains Class03 o-- Class04 : aggregation @enduml
You can define specific color and fonts for stereotyped classes.
@startuml 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 @enduml
It's possible to declare individual color for classes or note using the # notation.
You can use either standard color nameor RGB code.
You can also use color gradient in background, with the following syntax: two colors names separated either by:
|
,/
,\
,-
depending the direction of the gradient.
For example, you could have:
@startuml skinparam backgroundcolor AntiqueWhite/Gold skinparam classBackgroundColor Wheat|CornflowerBlue class Foo #red-green note left of Foo #blue\9932CC this is my note on this class end note package example #GreenYellow/LightGoldenRodYellow { class Dummy } @enduml
Sometimes, the default layout is not perfect...
You can use together
keyword to group some classes together : the layout engine will try to group them (as if they were in the same package).
You can also use hidden
links to force the layout.
@startuml class Bar1 class Bar2 together { class Together1 class Together2 class Together3 } Together1 - Together2 Together2 - Together3 Together2 -[hidden]--> Bar1 Bar1 -[hidden]> Bar2 @enduml
有些狀況下,會有一些很大的圖片文件。
能夠用 page (hpages)x(vpages)
這個命令把生成的圖片文件拆分紅若干個文件。
hpages
用來表示水平方向頁面數, and vpages
用來表示垂直方面頁面數。
你也可使用特定的皮膚設定來給分頁添加邊框(見例子)
@startuml ' Split into 4 pages page 2x2 skinparam pageMargin 10 skinparam pageExternalColor gray skinparam pageBorderColor black 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 @enduml
屬性:
學生基本信息:學號,姓名,性別 , 班級 ,
學生課程信息:課程號 , 課程名 , 成績 ,
學生選修課信息:學號,課程號,先修課。
3、類圖腳本程序
@startuml
class 學生基本信息 {
姓名:string
學號:varchar
性別:string
班級:string
__
+添加信息
+修改信息
+刪除信息
+更新信息
+保存
}
class 學生課程信息{
課程號:varchar
課程名:string
成績:string
__
+查看課程
+課程成績
}
class 學生選修課信息 {
學號:varchar
課程號:varchar
先修課:string
__
+登陸
+查找先修課
+退出
}
學生課程信息 <--> 學生基本信息
學生選修課信息 <--> 學生基本信息
@enduml
4、類圖示例