绘制时序图是 PlantUML 的一个强大功能,下面是详细的 PlantUML 时序图教程,帮助你理解如何使用它来创建清晰的时序图。

基本概念

时序图(Sequence Diagram)用于展示对象之间的交互以及它们之间的消息传递顺序。它主要由以下元素组成:

  • 参与者(Participant):图中的对象或实体。
  • 消息(Message):参与者之间发送的消息。
  • 激活(Activation):对象在处理一条消息的时间段。
基本语法

以下是创建一个简单时序图的基本语法:

@startuml
participant Alice
participant Bob

Alice -> Bob: Hello Bob, how are you?
Bob --> Alice: I'm good, thanks!
@enduml
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
参与者(Participants)

参与者可以是用户、对象、类、组件等。你可以使用 actorparticipantboundarycontrolentitydatabase 等关键字来定义不同类型的参与者。

@startuml
actor User
participant "Database" as DB
entity "Web Server" as WS

User -> WS: Request
WS -> DB: Query
DB --> WS: Result
WS --> User: Response
@enduml
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
消息(Messages)

消息可以是同步消息、异步消息、返回消息等。以下是各种消息的示例:

@startuml
participant Alice
participant Bob

Alice -> Bob: Synchronous message
Alice ->> Bob: Asynchronous message
Bob --> Alice: Return message
@enduml
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
激活和停止(Activation and Deactivation)

激活表示对象在处理消息时的活动状态。可以使用 activatedeactivate 来显示对象的激活和停用。

@startuml
participant Alice
participant Bob

Alice -> Bob: Request
activate Bob
Bob -> Bob: Internal processing
Bob --> Alice: Response
deactivate Bob
@enduml
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
生命线(Lifelines)

对象的生命线表示对象的存在和消息的时间线。对象的生命线可以用 destroy 表示结束。

@startuml
participant Alice
participant Bob

Alice -> Bob: Request
activate Bob
Bob -> Bob: Internal processing
Bob --> Alice: Response
deactivate Bob
destroy Bob
@enduml
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
分组和循环(Grouping and Loops)

你可以使用 altoptlooppar 等关键字来表示条件、选项、循环和并行操作。

条件(Alternatives)
@startuml
participant Alice
participant Bob

Alice -> Bob: Request

alt Success
  Bob --> Alice: Response
else Failure
  Bob --> Alice: Error
end
@enduml
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
循环(Loops)
@startuml
participant Alice
participant Bob

Alice -> Bob: Request

loop Every second
  Bob -> Alice: Status update
end
@enduml
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
并行(Parallel)
@startuml
participant Alice
participant Bob
participant Carol

par Parallel execution
  Alice -> Bob: Task 1
  Alice -> Carol: Task 2
end
@enduml
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
示例:综合示例

以下是一个包含多个特性的综合示例:

@startuml
actor User
participant "Web Browser" as Browser
participant "Web Server" as Server
participant "Database" as DB

User -> Browser: Open website
Browser -> Server: HTTP GET /
activate Server
Server -> DB: Query user data
activate DB
DB --> Server: Return user data
deactivate DB
Server --> Browser: HTML + CSS
deactivate Server
Browser -> User: Render page

User -> Browser: Click link
Browser -> Server: HTTP GET /page
activate Server
Server -> DB: Query page data
activate DB
DB --> Server: Return page data
deactivate DB
Server --> Browser: HTML + CSS
deactivate Server
Browser -> User: Render page
@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.
生成图表

使用命令行生成图表:

java -jar plantuml.jar sequence.puml
  • 1.

将生成的图像文件保存在同一目录中。

通过这些示例和语法,你应该可以创建出各种复杂的时序图,以帮助你更好地描述系统的行为和交互过程。如果有任何问题或需要更详细的解释,请随时告诉我!