3秒でわかる
シーケンス図でオブジェクトが処理中であることを示す細長い四角。誰がいつ制御を持っているのかを、線の太さで見えるようにする記法です。
もう少し詳しく
どういうものか
活性区間(実行仕様、アクティベーションバー)は、UML のシーケンス図でライフライン(縦の点線)の上に重ねて描く細長い長方形です。そのオブジェクトが処理を実行している最中であること、言い換えると制御を持っている期間を表します。
メッセージを受け取った時点で長方形が始まり、呼び出し元へ戻った時点で終わります。長方形の縦の長さが処理の期間にあたります。
なぜ必要か
矢印だけを並べた図では、呼び出しの順番は分かっても、どの処理がまだ終わっていないのかが読めません。A が B を呼び、B が C を呼んでいる間、A はずっと待っているのか、それとも返事を待たずに次へ進んだのか。活性区間を描くと、入れ子になった長方形として重なりが見えるため、この違いが図の上で判別できます。
具体例
注文処理を文字で写すと、次のような重なりになります。
利用者 画面 注文<a href="/glossary/api" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">API</a> 在庫DB
| | | |
|--注文する->|▉ | |
| |▉--POST----->|▉ |
| |▉ |▉--在庫確認->|▉
| |▉ |▉<--残3------|
| |▉<--201-------| |
|<--完了表示-|▉ | |
| | | |縦に伸びた ▉ が活性区間です。注文 API の区間が在庫 DB の区間を包み込んでいるので、API は在庫の返事を待って止まっていると読めます。
つまずきやすいところ
戻りの矢印を描かずに長方形だけ閉じる、あるいはその逆で、矢印は描いたのに長方形が終わらない、という不整合が起きがちです。開始と終了は必ず対応させます。
自分自身を呼び出す再帰や内部メソッド呼び出しでは、同じライフライン上に活性区間が二重に重なります。これは誤りではなく、入れ子の表現として正しい書き方です。
非同期のメッセージを実線の矢印(同期)で描いてしまうのも紛らわしい例です。返事を待たない呼び出しは開いた矢先で描き、呼び出し元の活性区間はそこで途切れずに続きます。
似た用語との違い
| 記号 | 意味 |
|---|---|
| ライフライン | オブジェクトが存在している期間を示す縦の点線 |
| 活性区間 | その中で実際に処理を実行している期間を示す長方形 |
| メッセージ | オブジェクト間の呼び出しを示す矢印 |
覚え方
点線は「生きている期間」、長方形は「働いている期間」です。太いところが仕事中と読みます。