UMLの一つであるシーケンス図は、クラスやオブジェクト間のやりとりを時間軸に沿って表現する図です。
複数の処理が並列で走る場合に、処理タイミングを整理する上で便利な図です。
例えば、マルチスレッドプログラムを開発している時に便利です。
シーケンス図を書くと、ややこしいスレッド間の関連をわかりやすく整理することができます。
マルチスレッドを取り扱う解説書やシーケンス図は良く出てくるのですが、保守開発等で自分がコーディングする時にも頭の整理のために役立てることができます。
以下では、javaでのスレッド制御(joinとsynchronized)で取り上げたサンプルコードを、試しにシーケンス図でまとめてみます。
このように、シーケンス図を書くことで、各スレッドの連関をわかりやすく整理することができます。
・そのまま実行した場合
・①のコメントアウトを外した場合(join)
・②のコメントアウトを外した場合(synchronized)
UMLの図を書く時は、PlantUMLを使うと便利です。
PlantUMLは、テキストからUMLの図を生成することができるツールです。
UMLをテキストで書くことで、手軽に図を書けるようになりますし、Gitでの管理・差分比較もできるようになります。
下記のページにアクセスするだけで、すぐに使うことができます。
図の書き方(文法)についても説明されています。
https://plantuml.com/ja/
オンライン上で図を生成することが可能で、上記ページ中で試しに作ることができる他、「オンラインサーバ」のページにアクセスすることで大きな画面で作ることができるようになります。
セキュリティや作業効率等の問題でオンライン上で図を生成したくない場合は、ローカル上で図を生成することもできます。
ローカル上で図を生成する方法は、「クイックスタートガイド」に書いてあります。
以下、試しに、シーケンス図を書いてみたものです。
前述の「①のコメントアウトを外した場合(join)」のケースについて書いています。
【サンプルコード】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
@startuml participant ThreadMain as tm participant ThreadBody_1 as tb1 participant ThreadBody_2 as tb2 participant ThreadCounter as tc tm -> tb1 : スレッド起動 tb1 -> tc : カウントアップ tc -> tc : カウント表示 rnote over tc ThreadBody_1による カウントアップ指示が あと4回繰り返される endrnote tm -> tb2 : スレッド起動 tb2 -> tc : カウントアップ tc -> tc : カウント表示 rnote over tc ThreadBody_2による カウントアップ指示が あと4回繰り返される endrnote @enduml |
【生成結果】
いかがでしたでしょうか。
UMLの中では、シーケンス図はかなり使用頻度が高い図です。
今回紹介したケースのように、処理のタイミングを整理したい時に便利な図なので、書き方を覚えておくと良いでしょう。
その際にPlantUMLを使えば、図を書いたり管理したりする手間も少なくなると思います。
コメント