シーケンス図(Sequence Diagram)
シーケンス図とは、クラスやオブジェクト間のやりとりを時間軸に沿って表現する図です。機能ごとに相互作用(Interaction)と呼ばれる下記のようなフレーム内に処理内容を記述します。
記述例
下の図は、在庫管理システムの一機能を表したものです。
【要件定義】
- 店員は在庫管理画面から在庫一覧を確認できる。
- この機能は、「店員オブジェクト」、「管理画面オブジェクト」、「倉庫オブジェクト」、「商品オブジェクト」から構成されている。
メッセージと呼ばれる矢印で各オブジェクト間の応答を表し、縦軸(上から下)を時系列として応答の順序を表現しています。
これにより、ある機能(例では在庫一覧)を実現する各オブジェクトが時間に沿ってどのように相互作用しているかがわかります。
構成要素
シーケンス図は次の要素で構成されます。
構成要素一覧
要素 | 表示形式 | 意味 | |
ライフライン(Lifeline) | 使用するオブジェクトやクラスを表現します。どちらか一方なら省略可能です。 | ||
実行仕様(ExecutionSpecification) | 生成されているライフラインが実行状態であることを意味します。 | ||
停止(Stop) | 生成されたライフライン自体の消滅を意味します。 | ||
メッセージ(Message) | 同期(Synchronous)メッセージ | 送り先のライフラインの実行に同期されるメッセージを意味します。メッセージ名には具体的な関数やINCLUDEディレクティブ等を記入します。 | |
非同期(Asynchronous)メッセージ | 送り先のライフラインの実行に同期されないメッセージを意味します。メッセージ名には具体的な関数やINCLUDEディレクティブ等を記入します。 | ||
応答(Reply)メッセージ | 送り先のライフラインから送り手への戻り値を意味します。メッセージ名には戻り値を格納する具体的な変数名等を記入します。 | ||
ファウンド(Found)メッセージ | 図解上にない送り手から送られた、もしくは送り手がダイアグラム上にないことを意味します。 | ||
ロスト(Lost)メッセージ | 意図された受け手に送られていない、もしくは受け手がダイアグラム上にないことを意味します。 |
制御構造の記述
シーケンス図では、制御構造を表現するために「複合フラグメント」を使用します。種類および、記述例は次の通りです。
複合フラグメントの種類
複合フラグメントには、次の種類があります。
複合フラグメント一覧
InteractionOperator | 読み | 意味 |
ref | 相互作用使用(InteractionUse) | 別のシーケンス図を参照することを表します。 |
alt | オルタナティブ(Alternative) | 分岐処理を表します。 |
opt | オプション(Option) | 条件を満たした場合のみ実行される処理を表します。 |
par | パラレル(Parallel) | 並列処理を表します。 |
loop | ループ(Loop) | ループ(繰り返し)処理を表します。 |
break | ブレイク(Break) | 処理の中断を表します。 |
critical | クリティカル(Critical) | マルチスレッド環境での同期処理など、排他制御を表します。 |
assert | アサーション(Assert) | 処理が妥当であるための定義を表します。 |
neg | 否定(negation) | 本来、実行されるはずがない処理(メッセージ)であることを表します。 |
ignore | 無効(ignore) | あまり重要な処理(メッセージ)ではないことを表します。 |
consider | 有効(Consider) | 重要な処理(メッセージ)であることを表します。 |
参照(REF)
下の図は、あるシステムのログイン処理をを表した例です。
【解説】
ログイン画面からの権限チェック処理は、別で定義されてるシーケンス図「権限チェック」を参照します。
条件分岐(ALT)
下の図は、社員が出張のため、交通手段の選択処理を表した例です。
【解説】
出張先が国内の場合は鉄道のチケットを購入し、海外の場合には飛行機のチケットを購入します。
分岐する各処理は点線で区切り、選択条件を、[ ](ガードと呼ばれる括弧)内に記述します。
条件判断(OPT)
下の図は、レンタルショップでDVDをレンタルする処理を表した例です。
【解説】
DVDをレンタルする際、もしその店の会員でなければ、先に会員登録の処理を行う必要があります。既に会員である場合は、会員登録処理を行わずDVDのレンタル処理を行います。
処理が行われる条件は、[ ](ガードと呼ばれる括弧)内に記述します。
並列処理(PAR)
下の図は、主婦が朝食を作る処理を表した例です。
【解説】
パンを焼いている間に、サラダの盛り付けを行っています。つまり、パンを焼く処理とサラダの盛り付け処理を平行で行っています。
並列で行われる各処理は、点線で区切ります。
反復処理(LOOP)
下の図は、買い物客がレジを通したときの処理を表した例です。
【解説】
店員オブジェクトは、客オブジェクトから商品を受け取り、商品の数だけレジ打ち処理を繰り返します。
ループ回数は、Loop[開始, 終了](開始、終了共に省略可能)の書式で指定します。
中断(BREAK)
下の図は、未成年者に酒類を販売しない処理を表した例です。
【解説】
店員オブジェクトは、未成年オブジェクトから商品を受け取り、商品の数だけレジ打ち処理を繰り返しますが、もし商品が酒類だった場合は処理を中断して、販売を拒否するメッセージを返すようになっています。
中断する条件は、[ ](ガードと呼ばれる括弧)内に記述します。
クリティカルセッション(CRITICAL)
下の図は、学生が教員に許可を取り、体育館を使用する処理を表した例です。
【解説】
使用許可申請処理と体育館の使用は随時並行処理されていますが、体育館使用中の処理は保護されています。
アサート(ASSERT)
下の図は、ATMによる入金処理を表した例です。
【解説】
入金後の通帳記載処理は、「残高合計 = 元の残高 + 入金額」が成り立たなければならないことを定義しています。
妥当性を定義する内容は、{}内に記述します。
不正なシーケンス(NEG)
下の図は、ATMによる入金処理を表した例です。
【解説】
入金後の通帳記載処理で、「残高合計 ≠ 元の残高 + 入金額」のとき、エラーを返す処理を行いますが、この処理は通常、起こりえない処理であることを示しています。
無効(IGNORE)
下の図は、ユーザ登録処理を表した例です。
【解説】
登録画面オブジェクトからデータベースオブジェクトへの「ユーザ数取得」メッセージは、ユーザ登録処理において、重要な処理ではないことを示しています。
「無効」のメッセージは、「ignore{メッセージ名,…}」の書式で指定します。
有効(CONSIDER)
下の図は、ユーザ登録処理を表した例です。
【解説】
登録画面オブジェクトからデータベースオブジェクトへの「情報登録、アクセスログ登録」メッセージは、ユーザ登録処理において、重要な処理であることを示しています。
「有効」のメッセージは、「consider{メッセージ名,…}」の書式で指定します。