PlantUMLシーケンス図を描く

シーケンス図の例_

' マーチン・ファウラー著 UMLモデリングのエッセンス 第3版 図4.1
@startuml{Fig4.1.png}
title 中央制御のシーケンス図
hide footbox

participant "an Order" as Order
participant "an Order Line" as OrderLine
participant "a Product" as Product
participant "a Customer" as Customer

[-> Order : calculatePrice
activate Order
Order -> OrderLine : getQuantity
activate OrderLine
deactivate OrderLine

Order -> OrderLine : getProduct
activate OrderLine
Order <-- OrderLine : "a Product"
deactivate OrderLine

Order -> Product : getPricingDetails
activate Product
deactivate Product

Order -> Order : calculateBasePrice
activate Order
deactivate Order

Order -> Order : calculateDiscounts
activate Order
Order -> Customer : getDiscountInfo
activate Customer
deactivate Customer
deactivate Order
deactivate Order
' マーチン・ファウラー著 UMLモデリングのエッセンス 第3版 図4.2
@startuml{Fig4.2.png}
title 分散制御のシーケンス図
hide footbox

participant "an Order" as Order
participant "an Order Line" as OrderLine
participant "a Product" as Product
participant "a Customer" as Customer

[-> Order : calculatePrice
activate Order
Order -> OrderLine : calculatePrice
activate OrderLine
OrderLine -> Product: "getPrice(quantity: number)"
activate Product
deactivate Product
deactivate OrderLine

Order -> Customer : "getDiscountedValue(an Order)"
activate Customer
Customer -> Order : getBaseValue
activate Order
deactivate Order

Customer --> Order : discountedValue
deactivate Customer
deactivate Order

@enduml

オブジェクトの生成と削除_

' マーチン・ファウラー著 UMLモデリングのエッセンス 第3版 図4.3
@startuml{Fig4.3.png}
title 参加者の生成と削除
hide footbox

participant "an Handler" as Handler
participant "a Query Command" as QC
participant "a Database Statement" as DS

[-> Handler : query database
activate Handler

create QC
Handler -> QC : new
activate QC

create DS
QC -> DS : new

QC -> DS : execute
activate DS
DS --> QC : results
deactivate DS

QC -> QC : extract results
activate QC
deactivate QC

QC -> DS : close
destroy DS
deactivate QC

QC --> Handler : results
destroy QC

deactivate Handler

@enduml

呼び出し_

@startuml{call.png}

title 呼び出し
hide footbox

Actor "太郎" as Taro
Actor "花子" as Hanako

Taro -> Hanako : 同期呼び出し

Taro -\ Hanako : 非同期呼び出し。UML 1.3以前

Taro ->> Hanako : 非同期呼び出し。UML 1.4以降

note over Taro, Hanako
     UML 1.3以前 と 1.4以降で非同期呼び出しの記法が変わっている。
     マーチン・ファウラー著「UMLモデリングのエッセンス 第3版」では、
     1.3以前の記法を推奨している。
end note

[-> Taro : 外部からの呼び出し
Taro -> Taro : 自己呼び出し
Hanako ->] : 外部呼び出し
Hanako <--] : 外部からの戻り

@enduml

相互作用フレーム_

シーケンス図はループ、分岐などの制御構造を描くのは適していない。制御を描くのにはアクティビティ図が適している。しかし、制御構造を描く記法として相互作用フレームが用意されている。以下には代表的なものをいくつか紹介する。

ループ_

@startuml{loop.png}
title 相互作用フレーム:ループ loop
hide footbox

Actor "an User" as User
participant "Amazon" as Amazon

activate User
User -> Amazon : Show query form

activate Amazon

loop for each keywords
     User -> Amazon : a keyword
     activate Amazon
     User <-- Amazon : an item list
     deactivate Amazon
end

deactivate Amazon
deactivate User

@enduml

分岐:if, else if, else_

@startuml{branch.png}
title 相互作用フレーム:分岐 alt
hide footbox

Actor "an User" as User
participant "Amazon" as Amazon

activate User
User -> Amazon : Show query form

User -> Amazon : a keyword
activate Amazon
User <-- Amazon : an item list

loop for each item
     alt value < 1,000 yen
     	 User -> Amazon : request detail information
	 
    else value < 500 yen
     	 User -> Amazon : buy

    else  other
     	 User -> User : skip
    end
end
' PlantUML記法では、 else if (elsif)が無く、else で代用しているのに注意!

deactivate Amazon
deactivate User

@enduml

条件付き実行_

@startuml{option.png}
title 相互作用フレーム:条件付き実行 opt
hide footbox

Actor "an User" as User
participant "Amazon" as Amazon

activate User
User -> Amazon : Show query form

User -> Amazon : a keyword
activate Amazon
User <-- Amazon : an item list

loop for each item
     opt it is a manga
     	 User -> Amazon : buy
    end
end
note over User, Amazon
     alt と opt の違いは、else if および else があるか無いかの違い。
     altにはelse if および else を設定できる。
     opt はelse if および else が設定できない。
end note

deactivate Amazon
deactivate User

@enduml

参照_

他の相互作用図(シーケンス図含む)を参照するときに使う。

@startuml{reference.png}

title 同期的呼び出しと非同期的呼び出し
hide footbox

Actor "an User" as User
participant "Amazon" as Amazon

activate User
User -> Amazon : buy a item
activate Amazon

ref over User, Amazon
    Payment
    Process of Payment
end ref

User -> Amazon : request detail information of an item

ref over Amazon : Recommendation(keyword)

User <-- Amazon : recommended items
deactivate Amazon
deactivate User

@enduml

戻る_