Web Analytics Made Easy - StatCounter

工業大学生ももやまのうさぎ塾

うさぎでもわかるをモットーに大学レベルの数学・情報科目をわかりやすく解説! 数式が読み込まれない場合は1回再読み込みしてみてください。

【基本情報対策】うさぎでもわかるソフトウェア工学 Part08 UML後編(シーケンス図・ユースケース図・アクティビティ図)

こんにちは、ももやまです。

今回は、前回に引き続きオブジェクト指向の設計で使われ、基本情報にもよく出てくるUMLの読み方、書き方について説明します。

 

UMLには全部で13種類の図があります。

13種類の図は大きく分けると、構造を表す図6種類と、振る舞いを表す図7種類に分けることができます。

f:id:momoyama1192:20200725160611j:plain

後編部分となるこの記事では、振る舞いを表す図、特にシーケンス図、ユースケース図、アクティビティ図の3つの読み方、書き方を中心に説明をしていきます。

 

 

 

前編では設計の構造を表すクラス図、オブジェクト図について説明しているので、クラス図やオブジェクト図の説明を見たい方は、下の記事をご覧ください。

www.momoyama-usagi.com

 

0.振る舞いを表す図

まず、振る舞いを表す7種類の図にはどんなものがあるかを見ていきましょう。

f:id:momoyama1192:20200725160620j:plain

基本情報の午前では、上の表の赤色で示しているシーケンス図、ユースケース図、アクティビティ図がどんな図なのかを聞かれることが特に多いので、最低でもこの3つの図はどんなことができるのかを頭に入れておきましょう。

(たまにコミュニケーション図とかも出てきますが…)

 

また、午後の選択問題「ソフトウェア設計」では、「シーケンス図」に関する問題が出題される可能性が比較的高いです。(UMLを使う問題の場合)

 

そのため、シーケンス図については少し詳しめに説明します。

 

1.シーケンス図

(1) シーケンス図とは

シーケンス図は、アクター(システム利用者)やシステム内部の間でのオブジェクトのやり取り(相互作用)を時系列で表す図です。

 

例えば、

  1. 利用者は券売機で切符を買う
  2. 利用者が券売機で買った切符を改札に入れると、ゲートを開き、切符に時刻を打刻する

の切符を買ってから改札を通るまでの処理をシーケンス図で表すと、下のように書くことができます。

f:id:momoyama1192:20200731033546g:plain

では、上の図をどう読むのかを見ていきましょう。

(2) シーケンス図の用語説明

シーケンス図は、

  • それぞれのオブジェクトの時系列を表すライフライン(下方向に伸びる破線)
  • オブジェクトのやり取りを表すメッセージ(3つの矢印で表現)

に分けることができます。

(i) ライフライン(各オブジェクト)

それぞれのオブジェクトのライフライン(生存期間)を破線で表します。

生存期間(破線)の中で、オブジェクトが実行中である区間のことを活性区間と呼び、□で表します。

f:id:momoyama1192:20200731033534g:plain

※ なお、オブジェクトの停止を表す×は「オブジェクトの消滅」を強調する際にのみ使われるので、あまり使われません。(そこまで重要ではないので概念だけ覚えておきましょう)

(ii) メッセージ(3つの矢印)

オブジェクト間のやり取りは以下の3つの矢印で表します。

f:id:momoyama1192:20200731105755g:plain

また、時系列が早いものは上に、遅いものは下に書かれます。

例えば上の図であれば、

  1. 青色矢印
  2. オレンジ色矢印
  3. 黄緑色矢印

の順で実行されます。

 

また、矢印の上にはメッセージの内容(処理の内容)応答メッセージ(返り値)を書きます。

f:id:momoyama1192:20200731105800g:plain

省略されることが多いですが、メッセージの内容を書く際に括弧 () で引数を示すこともあります。

 

 

先程例にだしたこちらのシーケンス図の

  • 各オブジェクトのライフライン
  • メッセージ間のやり取りの時系列

を確認してみましょう。

f:id:momoyama1192:20200731033546g:plain

この場合、矢印が上にある順、つまり

  1. 利用者が券売機で切符を買う
  2. 買った切符を利用者は手に入れる
  3. 利用者が手に入れた切符を改札に入れる
  4. 改札はゲートを開く
  5. 時刻が打刻された切符を利用者は手に入れる

の順番で処理されることを表しています。

 

 

 

(iii) メッセージの同期と非同期

非同期メッセージの矢印は、あまり使いませんが念のため同期との違いを確認しておきましょう。

メッセージの同期と非同期の違いは、応答メッセージを待たずにメッセージを送るか送らないかの違いです。

同期と非同期の違いを確認するために、先程の例の同期メッセージの1つを非同期にした下の図を見てみましょう。

f:id:momoyama1192:20200731033550g:plain

この図の場合「切符を入れる」のが非同期なため、1つ前の操作「切符を買う」の応答メッセージを待たずに処理が始まります。

つまり、切符を持たずに改札に突破するというちょっと危ない行為が実現されちゃいます。

 

このように、同期と非同期には少し大きな差があるので、非同期メッセージを使う場合は気を付けましょう。

(iv) 条件分岐

シーケンス図では、ある条件を満たすとき、満たさないときに分けて処理内容を書くことができます*1

例えば、ICカードを用いて改札を通り抜ける処理は、

  • 残高があるとき
    (そのまま改札を通過)
  • 残高不足のとき
    (いったん券売機でチャージしてから改札を通過)

の2通りに分けて下のように書くことができます。

f:id:momoyama1192:20200731033555g:plain

 

2.ユースケース図

ユースケース図は、システムを利用する人から見たときにシステムで出来ることはどんなことかを列挙した図です。

(利用者とシステムとのやり取りの関係を表した図と言ってもいいでしょう。)

 

利用者視点で見せるので、専門用語など開発者にしかわからない用語ではなく、エンドユーザー(システム利用者)がわかるような用語を使うのがポイントです。

 

例えば、下にある(某みどりの)券売機の発券システムで、

  • 乗車券を買う
  • 回数券を買う
  • 特急券を買う
  • 指定席を予約する
  • おトクなきっぷを予約する

のことができるとします。この場合、ユースケース図は下のようになります。

f:id:momoyama1192:20200731033600g:plain

シーケンス図のメッセージ内容(処理内容)をすべて箇条書きにしてまとめたものがユースケース図だと思ってください。

3.アクティビティ図

(1) アクティビティ図とは

アクティビティ図は、あるクラスの処理の開始から終了までの一連の流れを表した図です。

基本的な書き方はフローチャートとほぼ同じです。

f:id:momoyama1192:20200731033605g:plain

(2) 並行処理

下のように、処理を下のように線で書こうことにより、処理が並行して実行されることを表します。

例えば、下の図の場合、

  • ご飯を炊く
  • 肉を焼く

の2つの処理を並行して処理することを表しています。

f:id:momoyama1192:20200731033616g:plain

(3) 複数クラスに着目した書き方

アクティビティ図では、下のように2つ以上のクラスに注目した処理内容を書くことができます。

f:id:momoyama1192:20200731033622g:plain

上のアクティビティ図はICカードを用いて改札を通り抜ける処理を「改札」と「券売機」の2つのクラスに着目して書いたものです。

 

4.練習問題

では、基本情報や応用情報の問題で練習をしていきましょう。

構造を表す図(クラス図・オブジェクト図)とは異なり、それぞれの図がどんな特徴を持っているかについて出題されることが多いです。

練習1

UML(Unified Modeling Language)が定義する図のうち、オブジェクト間の相互作用を表現するためのものはどれか。

[基本情報技術者平成17年秋期 午前問38]

ア: オブジェクト図
イ: クラス図
ウ: コンポーネント図
エ: シーケンス図

 

練習2

UMLにおける振る舞い図の説明のうち、アクティビティ図のものはどれか。

ア: ある振る舞いから次の振る舞いへの制御の流れを表現する。
イ: オブジェクト間の相互作用を時系列で表現する。
ウ: システムが外部に提供する機能と、それを利用する者や外部システムとの関係を表現する。
エ: 一つのオブジェクトの状態がイベントの発生や時間の経過とともにどのように変化するかを表現する。

 

練習3

UMLのユースケース図の説明はどれか。

[応用情報技術者平成26年秋期 午前問46]

ア: 外部からのトリガに応じて、オブジェクトの状態がどのように遷移するかを表現している。
イ: クラスと関連から構成され、システムの静的な構造を表現している。
ウ: システムとアクタの相互作用を表現している。
エ: データの流れに注目してシステムの機能を表現している。

 

 

余裕がある人は、下のリンクで貼った基本情報の午後問題を解いてみましょう。

シーケンス図だけを使った問題です。

www.fe-siken.com

 

5.練習問題の答え

解答1

解答:エ

[それぞれの選択肢]

ア: オブジェクト図
→ オブジェクト(インスタンス)の状態、関連を表した図。オブジェクト間の相互作用だからオブジェクト図だろと安易に考えないように。

イ: クラス図
→ クラスの定義、関連づけを表す図。

ウ: コンポーネント図
→ 同じ処理をする複数のクラスを1つのグループにまとめて、それらの関係を表したもの。

エ: シーケンス図
→オブジェクト間の相互作用を表現する図。正解。

解答2

解答:ア

[それぞれの選択肢]

ア: ある振る舞いから次の振る舞いへの制御の流れを表現する。
→ 正解、アクティビティ図の説明。

イ: オブジェクト間の相互作用を時系列で表現する。
→ シーケンス図のこと。

ウ: システムが外部に提供する機能と、それを利用する者や外部システムとの関係を表現する。
→ ユースケース図のこと。

エ: 一つのオブジェクトの状態がイベントの発生や時間の経過とともにどのように変化するかを表現する。
→ 状態遷移図のこと。

解答3

解答:ア

[それぞれの選択肢]

ア: 外部からのトリガに応じて、オブジェクトの状態がどのように遷移するかを表現している。
→ アクティビティ図のこと。

イ: クラスと関連から構成され、システムの静的な構造を表現している。
→ クラス図のこと。

ウ: システムとアクタの相互作用を表現している。
→ 正解、ユースケース図のこと。

エ: データの流れに注目してシステムの機能を表現している。
→ DFDのこと。UMLですらない。DFDについてはこちらの記事をご覧ください。

6.さいごに

今回は、前回に引き続きUMLの中でもシーケンス図、ユースケース図、アクティビティ図の読み方、書き方について説明しました。

 

基本情報の午後問題で「ソフトウェア設計」を取らないのであれば、それぞれの図が何を中心に表すのかを理解しておけばOKです。

 

午後で「ソフトウェア設計」を取るのであれば、最低でも

  • クラス図
  • オブジェクト図
  • シーケンス図

の3つは読めるようにしましょう。(午後で頻出されるのはこの3つなので)

*1:条件満たすときの処理を基本系列、満たさないときの処理(例外処理)を代替系列と呼ぶこともあります。