博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UML第六次作业
阅读量:5012 次
发布时间:2019-06-12

本文共 9612 字,大约阅读时间需要 32 分钟。

一、学习PlantUML顺序图绘制方法学习顺序图

(1)简单示例

你可以用->来绘制参与者之间传递的消息, 而不必显式地声明参与者。

你也可以使用 --> 绘制一个虚线箭头。

 另外,你还能用 <- 和 <--,这不影响绘图,但可以提高可读性。 注意:仅适用于时序图,对于其它示意图,规则是不同的。

 @startuml

Alice -> Bob: Authentication RequestBob --> Alice: Authentication ResponseAlice -> Bob: Another authentication RequestAlice <-- Bob: another authentication Response@enduml

(2)声明参与者

关键字 participant 用于改变参与者的先后顺序。

 你也可以使用其它关键字来声明参与者:

  • actor
  • boundary
  • control
  • entity
  • database

 @startuml

actor Foo1boundary Foo2control Foo3entity Foo4database Foo5collections Foo6Foo1 -> Foo2 : To boundaryFoo1 -> Foo3 : To controlFoo1 -> Foo4 : To entityFoo1 -> Foo5 : To databaseFoo1 -> Foo6 : To collections@enduml

关键字 as 用于重命名参与者

你可以使用值或者颜色名修改 actor 或参与者的背景颜色。

 

@startumlactor Bob #red' The only difference between actor'and participant is the drawingparticipant Aliceparticipant "I have a really\nlong name" as L #99FF99/' You can also declare:   participant L as "I have a really\nlong name"  #99FF99  '/Alice->Bob: Authentication RequestBob->Alice: Authentication ResponseBob->L: Log transaction@enduml

您可以使用关键字 order自定义顺序来打印参与者。

 

@startumlparticipant Last order 30participant Middle order 20participant First order 10@enduml

(3)在参与者中使用非字母符号

 你可以使用引号定义参与者,还可以用关键字 as 给参与者定义别名。

@startumlAlice -> "Bob()" : Hello"Bob()" -> "This is very\nlong" as Long' You can also declare:' "Bob()" -> Long as "This is very\nlong"Long --> "Bob()" : ok@enduml

(4)给自己发消息

参与者可以给自己发信息,

消息文字可以用\n来换行。

@startumlAlice->Alice: This is a signal to self.\nIt also demonstrates\nmultiline \ntext@enduml

(5)修改箭头样式

修改箭头样式的方式有以下几种:

  • 表示一条丢失的消息:末尾加 x
  • 让箭头只有上半部分或者下半部分:将<>替换成\或者 /
  • 细箭头:将箭头标记写两次 (如 >> 或 //)
  • 虚线箭头:用 -- 替代 -
  • 箭头末尾加圈:->o
  • 双向箭头:<->

@startuml

Bob ->x Alice
Bob -> Alice
Bob ->> Alice
Bob -\ Alice
Bob \\- Alice
Bob //-- Alice
Bob ->o Alice
Bob o\\-- Alice
Bob <-> Alice
Bob <->o Alice
@enduml

(7)修改箭头颜色

你可以用以下记号修改箭头的颜色:

@startumlBob -[#red]> Alice : helloAlice -[#0000FF]->Bob : ok@enduml

(8)对消息序列编号

关键字 autonumber 用于自动对消息编号。

 @startuml

autonumberBob -> Alice : Authentication RequestBob <- Alice : Authentication Response@enduml

(9)组合消息

 我们可以通过以下关键词将组合消息:

  • alt/else
  • opt
  • loop
  • par
  • break
  • critical
  • group, 后面紧跟着消息内容

 

可以在标头(header)添加需要显示的文字(group除外)。

关键词 end 用来结束分组。

注意,分组可以嵌套使用。

 

@startumlAlice -> Bob: Authentication Requestalt successful case	Bob -> Alice: Authentication Accepted	else some kind of failure	Bob -> Alice: Authentication Failure	group My own label		Alice -> Log : Log attack start	    loop 1000 times	        Alice -> Bob: DNS Attack	    end		Alice -> Log : Log attack end	end	else Another type of failure   Bob -> Alice: Please repeat   end@enduml

(10)给消息添加注释

我们可以通过在消息后面添加 note left 或者 note right 关键词来给消息添加注释。

你也可以通过使用 end note 来添加多行注释。

 

@startumlAlice->Bob : hellonote left: this is a first noteBob->Alice : oknote right: this is another noteBob->Bob : I am thinkingnote left	a note	can also be defined	on several linesend note@enduml

(11)其他的注释

 可以使用note left ofnote right ofnote over在节点(participant)的相对位置放置注释。

还可以通过修改来高亮显示注释。

以及使用关键字end note来添加多行注释。

 

@startumlparticipant Aliceparticipant Bobnote left of Alice #aqua	This is displayed 	left of Alice. end note note right of Alice: This is displayed right of Alice.note over Alice: This is displayed over Alice.note over Alice, Bob #FFAAAA: This is displayed\n over Bob and Alice.note over Bob, Alice	This is yet another	example of	a long note.end note@enduml

(12)改变备注框的形状

你可以使用 hnote 和 rnote 这两个关键字来修改备注框的形状。

@startumlcaller -> server : conReqhnote over caller : idlecaller <- server : conConfrnote over server "r" as rectangle "h" as hexagonendrnote@enduml

(13)Creole和HTML

 

@startumlparticipant Aliceparticipant "The **Famous** Bob" as BobAlice -> Bob : hello --there--... Some ~~long delay~~ ...Bob -> Alice : oknote left  This is **bold**  This is //italics//  This is ""monospaced""  This is --stroked--  This is __underlined__  This is ~~waved~~end noteAlice -> Bob : A //well formatted// messagenote right of Alice  This is 
displayed __left of__ Alice. end notenote left of Bob
This is
displayed
**
left of
Alice Bob**. end notenote over Alice, Bob
This is hosted by
end note @enduml

(14)分隔符

 你可以通过使用 == 关键词来将你的图表分割多个步骤。

@startuml== Initialization ==Alice -> Bob: Authentication RequestBob --> Alice: Authentication Response== Repetition ==Alice -> Bob: Another authentication RequestAlice <-- Bob: another authentication Response@enduml

(15)引用

你可以在图中通过使用ref over关键词来实现引用

@startumlparticipant Aliceactor Bobref over Alice, Bob : initAlice -> Bob : helloref over Bob  This can be on  several linesend ref@enduml

(16)延迟

你可以使用...来表示延迟,并且还可以给延迟添加注释。

@startumlAlice -> Bob: Authentication Request...Bob --> Alice: Authentication Response...5 minutes latter...Bob --> Alice: Bye !@enduml

 

你可以使用|||来增加空间。

还可以使用数字指定增加的像素的数量。

@startumlAlice -> Bob: message 1Bob --> Alice: ok|||Alice -> Bob: message 2Bob --> Alice: ok||45||Alice -> Bob: message 3Bob --> Alice: ok@enduml

(18)生命线的激活与撤销

关键字activatedeactivate用来表示参与者的生命活动。

一旦参与者被激活,它的生命线就会显示出来。

activatedeactivate适用于以上情形。

destroy表示一个参与者的生命线的终结。

 

@startumlparticipant UserUser -> A: DoWorkactivate AA -> B: << createRequest >>activate BB -> C: DoWorkactivate CC --> B: WorkDonedestroy CB --> A: RequestCreateddeactivate BA -> User: Donedeactivate A@enduml

还可以使用嵌套的生命线,并且运行给生命线添加颜色。

 

@startumlparticipant UserUser -> A: DoWorkactivate A #FFBBBBA -> A: Internal callactivate A #DarkSalmonA -> B: << createRequest >>activate BB --> A: RequestCreateddeactivate Bdeactivate AA -> User: Donedeactivate A@enduml

(19)创建参与者

你可以把关键字create放在第一次接收到消息之前,以强调本次消息实际上是在创建新的对象。

@startumlBob -> Alice : hellocreate OtherAlice -> Other : newcreate control StringAlice -> Stringnote right : You can also put notes!Alice --> Bob : ok@enduml

(20)进入和发出消息

如果只想关注部分图示,你可以使用进入和发出箭头。

使用方括号[]表示图示的左、右两侧。

@startuml[-> A: DoWorkactivate AA -> A: Internal callactivate AA ->] : << createRequest >>A<--] : RequestCreateddeactivate A[<- A: Donedeactivate A@enduml

还可以使用下面的语法:

@startuml[-> Bob[o-> Bob[o->o Bob[x-> Bob[<- Bob[x<- BobBob ->]Bob ->o]Bob o->o]Bob ->x]Bob <-]Bob x<-]@enduml

(21)构造类型和圈点

可以使用<<>>给参与者添加构造类型。

在构造类型中,你可以使用(X,color)格式的语法添加一个圆圈圈起来的字符。

@startumlparticipant "Famous Bob" as Bob << Generated >>participant Alice << (C,#ADD1B2) Testable >>Bob->Alice: First message@enduml

(22)更多标题信息

你可以在标题中使用格式。

 

@startumltitle __Simple__ **communication** exampleAlice -> Bob: Authentication RequestBob -> Alice: Authentication Response@enduml

(23)包裹参与者

可以使用boxend box画一个盒子将参与者包裹起来。

还可以在box关键字之后添加标题或者背景颜色。

 

@startumlbox "Internal Service" #LightBlue	participant Bob	participant Aliceend boxparticipant OtherBob -> Alice : helloAlice -> Other : hello@enduml

(24)移除脚注

使用hide footbox关键字移除脚注。

 

@startumlhide footboxtitle Footer removedAlice -> Bob: Authentication RequestBob --> Alice: Authentication Response@enduml

(25)外观参数(skinparam)

 

改变字体和颜色。

可以在如下场景中使用:

  • 在图示的定义中,
  • 在或者提供的配置文件中。

你也可以修改其他渲染元素,如以下示例:

 

@startumlskinparam sequenceArrowThickness 2skinparam roundcorner 20skinparam maxmessagesize 60skinparam sequenceParticipant underlineactor Userparticipant "First Class" as Aparticipant "Second Class" as Bparticipant "Last Class" as CUser -> A: DoWorkactivate AA -> B: Create Requestactivate BB -> C: DoWorkactivate CC --> B: WorkDonedestroy CB --> A: Request Createddeactivate BA --> User: Donedeactivate A@enduml

@startuml

actor User

participant "First Class" as A

participant "Second Class" as B
participant "Last Class" as C
User -> A: DoWork
activate A
A -> B: Create Request
activate B
B -> C: DoWork
activate C
C --> B: WorkDone
destroy C
B --> A: Request Created
deactivate B
A --> User: Done
deactivate A
@enduml

(26)填充区设置

 可以设定填充区的参数配置。

 

@startumlskinparam ParticipantPadding 20skinparam BoxPadding 10box "Foo1"participant Alice1participant Alice2end boxbox "Foo2"participant Bob1participant Bob2end boxAlice1 -> Bob1 : helloAlice1 -> Out : out@enduml
二、以《工厂采购》系统为例,分析系统中的对象、消息。
  • 采购员选择所需采购货品;
  • 到达订货界面,接收客户信息,接收货品信息,显示货品信息;
  • 到达订货管理器,创建客户取货品信息,创建订单;
  • 创建客户到达客户区,客户取货品信息到达货品区;
  • 创建订单到订单区。
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
@startuml
skinparam backgroundColor #FFEFDB
skinparam handwritten 
true
 
skinparam sequence {
ArrowColor DeepSkyYellow
ActorBorderColor DeepSkyYellow
LifeLineBorderColor #A9A9A9
LifeLineBackgroundColor #FFFFE0
ParticipantBorderColor DeepSkyYellow
ParticipantBackgroundColor DodgerYellow
ParticipantFontName Impact
ParticipantFontSize 17
ParticipantFontColor #D1D1D1
ActorBackgroundColor aqua
ActorFontColor DeepSkyYellow
ActorFontSize 17
ActorFontName Aapex
}
actor 采购员
participant 
"订货界面" 
as 
A
participant 
"订货管理器" 
as 
B
participant 
"客户" 
as 
C
participant 
"货品" 
as 
D
participant 
"订单" 
as 
E
 
采购员 -> A: 客户信息()
activate A
采购员 -> A: 选择订货货品()
activate A
 
A -> B:接收客户信息()
activate B
A -> B:接收货品信息()
activate B
B --> A: 显示货品信息()
deactivate B
 
B -> C: 创建客户()<<create>>
activate C
B -> D: 取货品信息()
activate D
D --> B: 货品信息()
activate D
B -> E: 创建订单()<<create>>
activate E
@enduml

  

转载于:https://www.cnblogs.com/zjw980104/p/10826207.html

你可能感兴趣的文章
android获取USB设备的名称
查看>>
JavaPersistenceWithHibernate第二版笔记-第七章-005排序的集合(@org.hibernate.annotations.SortComparator)...
查看>>
ue4同c#通信时的中文乱码问题
查看>>
黄老师架构师课程笔记(二)
查看>>
mvc性能优化
查看>>
log
查看>>
663 如何做“低端”产品?(如何把低端做得高端 - 认同感)
查看>>
JDBC 第九课 —— 初次接触 JUnit
查看>>
Windows核心编程:第10章 同步设备IO与异步设备IO
查看>>
浏览器加载、解析、渲染的过程
查看>>
开放api接口签名验证
查看>>
sed 常用操作纪实
查看>>
C++复习:对C的拓展
查看>>
校外实习报告(九)
查看>>
android之android.intent.category.DEFAULT的用途和使用
查看>>
CAGradientLayer 透明渐变注意地方(原创)
查看>>
织梦DEDE多选项筛选_联动筛选功能的实现_二次开发
查看>>
iOS关于RunLoop和Timer
查看>>
SQL处理层次型数据的策略对比:Adjacency list vs. nested sets: MySQL【转载】
查看>>
已存在同名的数据库,或指定的文件无法打开或位于 UNC 共享目录中。
查看>>