PlantUMLについての記事2つ目。
正直これだけ書けてもどこで使うねんって感じではあるが、誰かに「こんな設計にしたいんですよね」って見せるときにホワイトボードや紙だといつか消しちゃうけども、まぁPlantUMLを使って一度テキストに落としておくと使い回ししやすいし、画像よりテキストはバージョン管理しやすいので便利かもなーとは思う。*1
というわけで予告通り結城先生のデザインパターン入門に出てきたクラス図をPlantUMLを使って書いてみよう。
- 作者: 結城浩
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2004/06/19
- メディア: 大型本
- 購入: 51人 クリック: 762回
- この商品を含むブログ (400件) を見る
まずは簡単なクラス図から
デザパタ入門の本にはUMLとは何ぞやという説明から入る。で、その説明は本またはUnified Modeling Language (UML)を直接読んでもらうこととして、クラス図を書いてみたい。
クラスにはフィールド*2やメソッドが生えている。クラス自体も抽象クラスと普通のクラス、あとインターフェースとある。
これらを表現するのにPlantUMLでは例えばデザパタ本のFig0-1ならこんな風に書く。
@startuml hide circle abstract class ParentClass { field1 {static} field2 {abstract} methodA() methodB() } class ChildClass { methodA() {static} methodC() } ParentClass <|-- ChildClass @enduml
クラス図の書き方はPlantUMLのクラス図の書き方を見ると載ってるが、ざっくり書くと
- クラスが抽象クラスならabstract classと書けば良い。抽象クラスでない普通のクラスなら単にclassを書く
- フィールドやメソッドが抽象だったり静的だったりするときには
{abstract}
、{static}
を前につけると良い - クラスの中身を記述した後で、クラス同士の関係を
<|--
(継承)や<|..
(実装)、o--
(集約)でひもづける。線の引き方はPlantUMLがうまいこと解決してくれる。 - PlantUMLを利用するとデフォルトで出て来る図にはCマークなどが付いたりするが、それらは隠すことが出来る(要素を隠すを参考)
シーケンス図を書いてみる
クラス同士の関係は何も継承や集約だけではなく、どのメソッドが呼ばれると何が動いてレスポンスがあるのかを示すシーケンス図も関係性を表す一つだ。なのでシーケンス図も書いてみよう。
例えばFig0-6は以下のように書ける。
@startuml participant User User -> Client:work activate Client Client -> Server: open activate Server Server --> Client deactivate Server Client -> Server: print activate Server Server -> Device: write activate Device Device --> Server deactivate Device deactivate Server Client -> Server: close activate Server Server --> Client deactivate Server Client --> User deactivate Client @enduml
実際に本にあるコロンや下線、Userという登場人物はないけども書こうと思えばこんな感じになる。
ざっくり書き方を書いておくと
- シーケンス図とクラス図を書く際に特別に「これはシーケンス図ですよー」「クラス図ですよー」という宣言はいらない。
- 基本的に上から順番に処理が進んでいくものとして書かれるので、PlantUMLのコードもそのつもりで書くことになる
- 矢印は
->
または<-
で書ける。-->
、<--
は点線になる。 - クラスのライフラインを表すには
activate
とdeactivate
で表現し、その間を縦に長い長方形でPlantUMLがよしなに書いてくれる。
その他シーケンス図の書き方についてはPlantUMLのシーケンス図の書き方を見るといい。
明日も技術ネタを何か書く。