シーケンス図(Sequence Diagram)

シーケンス図

シーケンス図は、クラスやオブジェクト間のやりとりを時間軸に沿って表現する図です。
シーケンス図では、図の上から下へ、垂直に時間が進むと仮定します。
水平に、異なるオブジェクトが配列され、特定の時間に発生する操作を記述します。
つまり、垂直に時間、水平にオブジェクトを記述する 2 次元グラフなのです。
まず、図に記述するオブジェクトを左上から右に向かって順に列挙します。
オブジェクトの記法は静的構造図のオブジェクトと同一です。
ただし、操作や属性を記述する必要はありません。

機能ごとに相互作用(Interaction)と呼ばれる下記のようなフレーム内に処理内容を記述します。

構成要素

シーケンス図で使用される要素を次の表に示します。

構成要素一覧

番号 要素 表示形式 意味
1 ライフライン(Lifeline) 相互作用中に参加要素で発生するイベントのシーケンスを表す縦の線で、時間は線の下方向に向かって経過します。
この参加要素は、クラス、コンポーネント、またはアクターのいずれかのインスタンスです。どちらか一方なら省略可能です。
2 アクター(Actor) 開発中のシステムの外部にある参加要素。
生存線の [アクター] プロパティを設定することにより、生存線の上部にアクター シンボルを表示できます。
3 同期(Synchronous)メッセージ 送り先のライフラインの実行に同期されるメッセージを意味します。メッセージ名には具体的な関数やINCLUDEディレクティブ等を記入します。
同期メッセージの送信側は、同期メッセージに対する応答を待ってから処理を続行します。
図には、呼び出しと応答の両方が示されます。
同期メッセージは、プログラム内での通常の関数呼び出しを表すためだけでなく、同じように動作するその他の種類のメッセージを表すためにも使用されます。
4 非同期(Asynchronous)メッセージ 送り先のライフラインの実行に同期されないメッセージを意味します。メッセージ名には具体的な関数やINCLUDEディレクティブ等を記入します。
送信側が処理を続行するときに、応答を必要としないメッセージ。
非同期メッセージでは、送信側からの呼び出しのみが示されます。別個のスレッド間での通信や新しいスレッドの生成を表すために使用します。
5 実行仕様(ExecutionSpecification) 生成されているライフラインが実行状態であることを意味します。
参加要素の生存線上にあり、参加要素によって操作が実行されている期間を表す縦長の網掛けされた四角形。
実行は、参加要素がメッセージを受信した時点から開始されます。
実行を開始したメッセージが同期メッセージの場合、実行は送信側への «return» の矢印で終了します。
6 コールバック メッセージ 前に実行した呼び出しの応答を待っている参加要素に返されるメッセージ。
結果として生成される実行発生は、既存の実行発生の上に示されます。
7 自己メッセージ 参加要素がその参加要素自体に送信するメッセージ。
結果として生成される実行発生は、送信側の実行発生の上に示されます。
8 応答(Reply)メッセージ 送り先のライフラインから送り手への戻り値を意味します。メッセージ名には戻り値を格納する具体的な変数名等を記入します。
9 ファウンド(Found)メッセージ 不明な参加要素または未指定の参加要素から送信される非同期メッセージ。
10 ロスト(Lost)メッセージ 不明な参加要素または未指定の参加要素へ送信される非同期メッセージ。
11 コメント コメントは、生存線上の任意の場所に追加できます。
12 相互作用使用 別の図で定義されているメッセージのシーケンスを囲みます。
相互作用使用を生成するには、ツールをクリックし、包含する生存線を横切る位置にドラッグします。
13 結合フラグメント フラグメントのコレクション。 各フラグメントで、1 つまたは複数のメッセージを囲むことができます。 結合フラグメントには、いくつかの種類があります。
フラグメントを生成するには、メッセージを右クリックし、[ブロックを挿入] をポイントして、フラグメントの種類をクリックします。
14 フラグメントのガード フラグメントが発生するかどうかを決定する条件を示すために使用できます。
ガードを設定するには、フラグメントを選択し、ガードを選択して、値を入力します。
15 停止(Stop) オブジェクトがにアクセスできなくなる削除されない位置を表します。 各生存線の下に表示されます。

制御構造の記述

シーケンス図では、制御構造を表現するために「複合フラグメント」を使用します。種類および、記述例は次の通りです。

複合フラグメントの種類

複合フラグメントには、次の種類があります。

複合フラグメント一覧

InteractionOperator 読み 意味
ref 相互作用使用(InteractionUse) 別のシーケンス図を参照することを表します。
alt オルタナティブ(Alternative) 分岐処理を表します。
opt オプション(Option) 条件を満たした場合のみ実行される処理を表します。
par パラレル(Parallel) 並列処理を表します。
loop ループ(Loop) ループ(繰り返し)処理を表します。
break ブレイク(Break) 処理の中断を表します。
critical クリティカル(Critical) マルチスレッド環境での同期処理など、排他制御を表します。
assert アサーション(Assert) 処理が妥当であるための定義を表します。
neg 否定(negation) 本来、実行されるはずがない処理(メッセージ)であることを表します。
ignore 無効(ignore) あまり重要な処理(メッセージ)ではないことを表します。
consider 有効(Consider) 重要な処理(メッセージ)であることを表します。

参照(REF)

下の図は、あるシステムのログイン処理をを表した例です。

!! tips "解説" ログイン画面からの権限チェック処理は、別で定義されてるシーケンス図「権限チェック」を参照します。

条件分岐(ALT)

下の図は、社員が出張のため、交通手段の選択処理を表した例です。

!! tips "解説" 出張先が国内の場合は鉄道のチケットを購入し、海外の場合には飛行機のチケットを購入します。
分岐する各処理は点線で区切り、選択条件を、[ ](ガードと呼ばれる括弧)内に記述します。

条件判断(OPT)

下の図は、レンタルショップでDVDをレンタルする処理を表した例です。

!! tips "解説" DVDをレンタルする際、もしその店の会員でなければ、先に会員登録の処理を行う必要があります。
既に会員である場合は、会員登録処理を行わずDVDのレンタル処理を行います。
処理が行われる条件は、[ ](ガードと呼ばれる括弧)内に記述します。

並列処理(PAR)

下の図は、主婦が朝食を作る処理を表した例です。

!! tips "解説" パンを焼いている間に、サラダの盛り付けを行っています。
つまり、パンを焼く処理とサラダの盛り付け処理を平行で行っています。
並列で行われる各処理は、点線で区切ります。

反復処理(LOOP)

下の図は、買い物客がレジを通したときの処理を表した例です。

!! tips "解説" 店員オブジェクトは、客オブジェクトから商品を受け取り、商品の数だけレジ打ち処理を繰り返します。
ループ回数は、Loop[開始, 終了](開始、終了共に省略可能)の書式で指定します。

中断(BREAK)

下の図は、未成年者に酒類を販売しない処理を表した例です。

!! tips "解説" 店員オブジェクトは、未成年オブジェクトから商品を受け取り、商品の数だけレジ打ち処理を繰り返しますが、もし商品が酒類だった場合は処理を中断して、販売を拒否するメッセージを返すようになっています。
中断する条件は、[ ](ガードと呼ばれる括弧)内に記述します。

クリティカルセッション(CRITICAL)

下の図は、学生が教員に許可を取り、体育館を使用する処理を表した例です。

!! tips "解説" 使用許可申請処理と体育館の使用は随時並行処理されていますが、体育館使用中の処理は保護されています。

アサート(ASSERT)

下の図は、ATMによる入金処理を表した例です。

!! tips "解説" 入金後の通帳記載処理は、「残高合計 = 元の残高 + 入金額」が成り立たなければならないことを定義しています。妥当性を定義する内容は、{}内に記述します。

不正なシーケンス(NEG)

下の図は、ATMによる入金処理を表した例です。

!! tips "解説" 入金後の通帳記載処理で、「残高合計 ≠ 元の残高 + 入金額」のとき、エラーを返す処理を行いますが、この処理は通常、起こりえない処理であることを示しています。

無効(IGNORE)

下の図は、ユーザ登録処理を表した例です。

!! tips "解説" 登録画面オブジェクトからデータベースオブジェクトへの「ユーザ数取得」メッセージは、ユーザ登録処理において、重要な処理ではないことを示しています。
「無効」のメッセージは、「ignore{メッセージ名,…}」の書式で指定します。

有効(CONSIDER)

下の図は、ユーザ登録処理を表した例です。 !! tips "解説" 登録画面オブジェクトからデータベースオブジェクトへの「情報登録、アクセスログ登録」メッセージは、ユーザ登録処理において、重要な処理であることを示しています。
「有効」のメッセージは、「consider{メッセージ名,…}」の書式で指定します。

シーケンス図を生成するための基本の手順

シーケンス図を生成する

  1. Visio 2013が動き出す。
  2. ブレーンストーミング図を選択する。
  3. 空き「図面1」が生成する。
  4. 「図形」に「UMLシーケンス」が開く。

シーケンス図を描画する

  1. ツールボックスから生存線を図上にドラッグし、それによってクラス、コンポーネント、アクター、またはデバイスのインスタンスを表現します。
  2. 特定の目的を達成するために、生存線が相互にどのように作用するかを示すメッセージを生成します。メッセージを生成するには、メッセージツールをクリックします。 次に、メッセージを開始するポイントの送信生存線をクリックしてから、受信生存線をクリックします。受信生存線に実行発生が表示されます。 実行発生は、インスタンスによるメソッドの実行期間を表します。 実行発生から開始される他のメッセージを生成できます。
  3. 不明なイベント ソースから受信するメッセージ、または不明な宛先にブロードキャストされるメッセージを表示するには、図上の空白スペースとの間でやり取りされる非同期メッセージを描画します。 これらのメッセージは、拾得メッセージまたは消失メッセージと呼ばれます。
  4. 同じコンポーネントまたはシステムへの主要なメッセージごとにシーケンス図を描画します。

メッセージの順序を変更する

  • 生存線内でメッセージを上下にドラッグします。 他のメッセージの上にドラッグすることも、実行ブロックの内外にドラッグすることもできます。
  • メッセージをクリックし、↑キーと↓キーを使用してメッセージの位置を調整します。 メッセージの順序を変更するには、Shift キーを押しながら↑キーを押すか、Shift キーを押しながら↓キーを押します。

シーケンス図上のメッセージ シーケンスを移動またはコピーする

  1. メッセージを右クリックし、「コピー」をクリックします。
  2. 実行発生か、新しいメッセージの送信側にする生存線を右クリックし、「貼り付け」をクリックします。 必要に応じて、別の図上の要素を新しい送信側にしてもかまいません。
  3. メッセージとそのすべての付属メッセージのコピーが、実行発生の端か、生存線の端に追加されます。

シーケンス図のレイアウトを調整する

  • 図を左クリックし、「グループ」をドラッグする。
  • 操作を元に戻すには、「ページへドロップを元に戻す」をクリックします。

相互作用を所有するパッケージを変更する

  1. UML モデル エクスプローラーで、シーケンス図に表示される相互作用を探します。
  2. 相互作用をパッケージにドラッグします。または、相互作用を右クリックし、「切り取り」をクリックします。 パッケージを右クリックし、「貼り付け」をクリックします。