基本編(2) 動きを表現するシーケンス図
UMLシーケンス図を、モデリングツール astah*でサンプル図を描きながら解説します。
[スクリプト]
モデリングしてますか?
今日は、シーケンス図をやってみたいと思います。
シーケンス図は、複数のオブジェクトが協力して、1つのゴールを達成する、そのような振る舞いを表現した図です。例として、このような携帯のアプリを考えてみます。
携帯に、こんな情報(右図)を入力して登録ボタンを押すと、それがサーバーに送信されて、ユーザー登録が行われる。そんな一連のアクションを、シーケンス図で表現してみたいと思います。
シーケンス図には、2通り描き方があって、1つは、ラフに登場するオブジェクトを描いていく方法と、もう1つは、クラス図を前提として、そのクラスの参加する振る舞いを描いていく。この2種類があります。

本日の例題
今日はその両方のやり方で、やってみたいと思います。
実際に、描くシーケンス図は、このようになります(右図)。
ユーザーが3つの情報を入力して、登録ボタンを押すと、アプリがサーバーに登録を行う、このようなモデルです。
では、実際のastahで見てもらいましょう。どうぞ。
ラフな”シーケンス図を描いてみる
ここでは、ラフなイメージのシーケンス図を描きます。
まず、ライフラインを1つ選んで描いていきます。ここに、ライフラインの種類を選ぶ事ができます。
1つ選んで、ここでは利用者という名前にしましょう。
もう1つ、アプリを代表するライフラインを作ります。「アプリ」と入れます。
次に、利用者が、そのアプリに対して何を操作するかをメッセージを使って描いていきます。
ここでメッセージを選ぶ事も出来ますが、astahではこのバーを引っ張る事によって、描き入れる事ができます。
ここでは、名前を入力するので「名前」と入れます。
次にもう1つ描いてみましょう。
名前の他にも、利用者が入力するものとして「呼び名」というものを入れてみましょう。

アプリ登録の流れ – シーケンス図
「呼び名」と「名前」をアプリに設定します。
それから、例えば「アバター」というのも、ここに入れてみましょう。利用者が、アプリに対して「名前」と「呼び名」と「アバター」を設定した後、この3つの情報を入れて「了解」というボタンを押すとします。
もう1つのライフラインを追加します。
そうすると次に、この情報で、「アプリ」が「サーバー」に向かって、情報を「ユーザー設定」という風に、「サーバー」に対して呼び出します。ここではリターンのシーケンスも入れたいので、リターンメッセージを追加して、これで一通りできました。
利用者が、アプリに対して、入力したものがサーバーに送られた、そんな図が、1つ描けました。
先にクラス図を描いてから、シーケンス図を作成する
次に、最初からクラス図がある場合、これらのクラスが参加するシーケンス図を描いていきたいと思います。
ここに「利用者」、それから「アプリの画面」、「サーバー」、3つのクラスを用意しています。この3つからシーケンス図を描いていきましょう。
左側の構造ツリーに、それぞれのクラスが見えます。
これをドラッグ&ドロップする事によって、それぞれのクラスのライフラインが、自動的に作られます。ここでは「利用者」、「ユーザー登録画面」、この2つの間にメッセージを描きます。
同じようにメッセージを引っ張ると、ここに現れるのが、既に「ユーザー登録画面」に設定されている操作です。
そこから1つ選ぶことによって、メッセージを描く事も可能です。
同じように「呼び名入力」、「送信」というメッセージも描き加えます。
そしてサーバーも同じように、ドラッグ&ドロップしましょう。
この3つが揃った後で、サーバーに対して、「ユーザーの登録」という操作を呼び出します。
後にメッセージを追加したくなった時も、シーケンス図から直接メッセージを描く事ができます。
この新しく作ったメッセージを、その背後にあるクラスに対して登録する事ができます。

ドラッグ&ドロップで操作の表示順序を入替え
ここで、そのメッセージ名を入力し「アバター登録」とします。
そうすると、ここのシーケンス図で描いた図の裏にあるクラス図に対して、自動的にこのメソッドが追加されることになります。このように「アバター登録」が追加されました。
順番が気に入らない場合は、ドラッグ&ドロップで、順番を変える事もできます。
クラス図を吟味する
さて、実際の開発では、なかなか1発でクラス図を描く事が出来ません。
ですから、クラス図を描いてシーケンス図を描いてみる、そしてクラス図を成長させる、という事をやっていきます。
その中心にあるのが、ユースケースです。
ユースケースを1つ選んで、シーケンス図を描いてみる、そしてクラス図を吟味する、この過程を回していって
クラス図を完成させていきます。
では、みなさんの開発でも、試してみてください。