Thể hiện các mô hình thiết kế bằng ngôn ngữ PlanUML
Chắc hản các bạn không còn lạ lẫm gì với khái niệm ngôn ngữ UML trong quá trình thiết kế phần mềm. Lần đầu tiên được biết đến khi đang làm việc tại Nhật, đó chính là PlanUML. Các bạn có thể tham khảo kỹ hơn tại trang chủ của PlantUML UML được chia làm 2 loại chính đó là biểu đồ thể hiện ...
Chắc hản các bạn không còn lạ lẫm gì với khái niệm ngôn ngữ UML trong quá trình thiết kế phần mềm. Lần đầu tiên được biết đến khi đang làm việc tại Nhật, đó chính là PlanUML. Các bạn có thể tham khảo kỹ hơn tại trang chủ của PlantUML
UML được chia làm 2 loại chính đó là biểu đồ thể hiện Behavior và Structural
Behavior
| Diagram | PlantUML | 説明 |
|---|---|---|
| ユースケース図 | Use Case | Biểu thị các yêu cầu chức năng |
| アクティビティ図 | Activity | Biểu thị trạng thái của tiến trình |
| ステートチャート図 | State | Biểu thị trạng của đối tượng |
| シーケンス図 | Sequence | Thể hiện quá trình tương tác |
Structure
| Diagram | PlantUML | 説明 |
|---|---|---|
| クラス図 | Class | Represent a logical view |
| オブジェクト図 | Object | Represent a logical view |
| コンポーネント図 | Component | Represent component dependencies |
| パッケージ図 | Component | Represent package dependencies |
| 配置図 | Component | Express the physical arrangement of the system |
Use Case
Biểu thị các yêu cầu chức năng
| keyword | usage | image |
|---|---|---|
| ( ) | Use Case | ![]() |
| -> | Relation | ![]() |
| .> | Extend, Include | ![]() |
@startuml actor Promoter actor Entrant Promoter --> (Create Event) Promoter -> (Attend Event) Entrant --> (Find Event) (Attend Event) <- Entrant (Attend Event) <.. (Create Member) : <<include>> @enduml

Activity
Biểu thị trạng thái của tiến trình
| keyword | usage | image |
|---|---|---|
| " " | activity | ![]() |
| (*) -> | Start state | ![]() |
| -> (*) | Exit status | ![]() |
@startuml
(*) --> "Find Event"
"Find Event" -> "Attend Event"
if "Capacity?" then
->[ok] "Create Ticket"
else
-->[full] if "Standby?" then
->[ok] "Standby Ticket"
else
-->[no] "Cancel Ticket"
"Cancel Ticket" --> (*)
endif
endif
"Create Ticket" --> ==show==
"Standby Ticket" --> ==show==
==show== --> "Show Ticket"
"Show Ticket" --> (*)
@enduml

State
A state machine diagram represents the state of an object.
| keyword | usage | image |
|---|---|---|
| [*] -> | Start state | ![]() |
| -> [*] | Exit status | ![]() |
@startuml [*] --> active active -right-> inactive : disable inactive -left-> active : enable inactive --> closed : close active --> closed : close closed --> [*] @enduml

Sequence
Sequence diagrams represent messages and sequences exchanged between objects
| keyword | usage | image |
|---|---|---|
| -> | Synchronization message | ![]() |
| <-- | Synchronous response | ![]() |
| ->> | Asynchronous message | ![]() |
| <<-- | Asynchronous response | ![]() |
@startuml actor Entrant Entrant -> Ticket : Attend Event Request activate Ticket Ticket -> Member : Create Member Request activate Member Member -> Member : Create Member Ticket <-- Member : Create Member Response deactivate Member Ticket -> Ticket : Create Ticket Entrant <-- Ticket : Attend Event Response deactivate Ticket @enduml

Class
Class diagrams represent logical views.
| keyword | usage | image |
|---|---|---|
| class | Class | ![]() |
| + | Public | ![]() |
| - | Private | ![]() |
| # | Protected | ![]() |
| ~ | Package | ![]() |
@startuml
class User {
username
password
+sign_in()
}
class Group {
name
}
class Member {
roles
}
User .. Member
Group .. Member
@enduml

Object
Object diagrams represent logical views.
| keyword | usage | image |
|---|---|---|
| object | object | ![]() |
| *- | Composition | ![]() |
| o- | Consolidation | ![]() |
@startuml object User object Group object Member object Event object Ticket User . Group User o.. Member Group o.. Member Group o. Event Event o.. Ticket Member . Ticket @enduml

Component
コンポーネント図は、コンポーネントの依存関係を表現します。
| keyword | usage | image |
|---|---|---|
| [ ] | コンポーネント | ![]() |
@startuml
cloud "Cloud" {
package "Package" {
[register]
frame "frame" {
[backup]
}
}
}
node "Node" {
database "Database" {
[store]
}
folder "Folder" {
[File]
}
}
[register] .. [store] : HTTP
[backup] .. [File] : FTP
@enduml

Note
タイトル・ノート・コメントは共通で使えます。
| keyword | usage | image |
|---|---|---|
| title | タイトル | ![]() |
| note left : | 左のノート | ![]() |
| note right : | 右のノート | ![]() |
| ' | 1行 コメント | |
| /' '/ | ブロック コメント |
@startuml title Title ( ) note left : Note [ ] note right : Note ' single-line comment /' block comment '/ @enduml

Element
アクターやエンティティなどの要素が使えます。
| keyword | usage | image |
|---|---|---|
| actor | アクター | ![]() |
| agent | エージェント | ![]() |
| usecase | ユースケース | ![]() |
| component | コンポーネンント | ![]() |
| boundary | バウンダリー | ![]() |
| control | コントロール | ![]() |
| entity | エンティティー | ![]() |
| interface | インタフェース | ![]() |
@startuml actor actor :Actor alias: agent agent usecase usecase component component boundary boundary control control entity entity interface interface @enduml

Package
フォルダーやノードなどのパッケージが使えます。
| keyword | usage | image |
|---|---|---|
| package | パッケージ | ![]() |
| folder | フォルダー | ![]() |
| artifact | アーティファクト | ![]() |
| node | ノード | ![]() |
| frame | フレーム | ![]() |
| cloud | クラウド | ![]() |
| database | データベース | ![]() |
| storage | ストレージ | ![]() |
@startuml package package folder folder artifact artifact node node frame frame cloud cloud database database storage storage @enduml

Arrow
矢印の向きと配置の位置を指定できます。
| keyword | usage | image |
|---|---|---|
| -up-> | 上 | ![]() |
| -down-> | 下 | ![]() |
| -left-> | 左 | ![]() |
| -right-> | 右 | ![]() |
@startuml up -up-> right -right-> down -down-> left -left-> up @enduml

UML ではありませんが 簡易なウィジェット を表現することができます。
Basic widgets
ボタンやインプットなどを表示します。
@startuml
salt
{
Just plain text
[This is my button]
() Unchecked radio
(X) Checked radio
[] Unchecked box
[X] Checked box
"Enter text here "
^This is a droplist^
}
@enduml

Tree widget
ツリーの構造を表示します。
@startuml
salt
{
{T
+ World
++ America
+++ Canada
+++ USA
++++ New York
++++ Boston
+++ Mexico
++ Europe
+++ Italy
+++ Germany
++++ Berlin
++ Africa
}
}
@enduml

Example
実用的なサンプルとして OAuth のいくつかの図を UML で表現します。 OAuth はRFC 6749の基準ですがGitHubの Web Application Flow を参考にしています。
Component
役割ごとのコンポーネントが、それぞれのノードに配置されています。
@startuml
actor "User"
node "Application" {
[Client]
}
node "API" {
[Resource]
}
node "Authentication" {
[AuthN]
}
node "Authorization" {
[AuthZ]
}
[User].[Client]
[User]..[AuthN]
[User]..[AuthZ]
[AuthN]..[AuthZ]
[Client]..[AuthN]
[Client]..[AuthZ]
[Client].[Resource]
@enduml

Sequence
ノートやディバイダを工夫するとシーケンスが解りやすくなります。
@startuml actor User == Initial == User -> Client : Request Client Sign In note right : GET /user/sign_in activate Client Client -> Client : Access Token? == Authentication == Client -> AuthN : Redirect note right : GET /oauth/authorize deactivate Client activate AuthN AuthN -> AuthN : Current User? AuthN -> AuthN : Redirect note right : GET /user/sign_in User <- AuthN : Response AuthN Sign In deactivate AuthN User -> AuthN : Request AuthN Sign In (ID, Pass) activate AuthN note right : POST /user/sign_in AuthN -> AuthN : Redirect note right : GET /oauth/authorize == Authorization == AuthN -> AuthZ : Redirect note right : GET /oauth/authorize deactivate AuthN activate AuthZ User <- AuthZ : Response AuthZ Application deactivate AuthZ User -> AuthZ : Request AuthZ Application (Allow) note right : POST /oauth/authorize activate AuthZ AuthZ -> AuthZ : Generate Code Client <- AuthZ : Redirect note right : GET /callback deactivate AuthZ activate Client Client -> AuthZ : Request Access Token note right : POST /oauth/access_token activate AuthZ AuthZ -> AuthZ : Authorization Code? AuthZ -> AuthZ : Generate Token Client <-- AuthZ : Response Access Token deactivate AuthZ Client -> Client : Redirect note right : GET /user/sign_in Client -> Client : Access Token? == Resource == Client -> Resource : Request User (Access Token) note right : GET /api/user activate Resource Client <-- Resource : Response User deactivate Resource == Final == Client -> Client : Redirect note right : GET / User <- Client : Response Client Sign In deactivate Client @enduml










































