You are on page 1of 24

オブジェクト指向論(Q)

オブジェクト指向概論(B1)
オブジェクト指向(K1)

講義資料#5
2023/5/8
來村 徳信
第1回講義

モデルの分類の観点 復習

「 時間的」観点からの分類︓
これまで  (1) 「静的」モデル(UML︓「構造図」)
の講義
• 対象世界になにが存在し,どのような関係があるかなどを表す.
• 時間を気にしない.存在しうるオブジェクトや関係を全部,記述する
• オブジェクトの「性質」を表す
これから
の講義  (2) 「動的」モデル(UML︓「振る舞い図」)
• 時間が流れている
• 対象世界やソフトウェアがどのように動くか(振る舞い)を表す
• オブジェクトの「動作/処理/相互作⽤」を表す
「 内部 / 外部 」の観点からの分類︓
 (1) 「外部的」観点からのモデル
• 情報システムを外部(ユーザの観点)から⾒たモデル.機能を表す.
• 情報システムが内部的にどう動くかから独⽴
• 分析フェイズや設計フェイズで⽤いられる
 (2) 「内部的」観点からのモデル
• 情報システムが内部的にどう動くかを表す 2

• 設計フェイズの後半の詳細設計で⽤いられる
第1回講義
復習

UMLのモデル図の種類
 13種類ある
 構造図(= 静的モデル)
クラス図,オブジェクト図,パッケージ図,コンポーネ
ント図,コンポジット構造図,配置図
 振る舞い図(= 動的モデル)
「相互作⽤図」
 シーケンス図,コミュニケーション図,相互作⽤図,
タイミング図
ユースケース図,アクティビティ図,ステートマシン図

 本講義では下線のモデル図(のみ)を扱う.
3
テーマと流れ
 外部的観点からの動的モデル
 外部的観点︓システムを外部から捉える
 動的︓時間を明⽰的に扱う
ユースケース図
 機能的要求,使⽤シナリオ
 内部的観点からの動的モデル
アクティビティ図
 内部的観点から「処理(オブジェクトの動作)の流れ」を表す
 外部的観点からの「ワークフロー」の表現にも使われる
次 シーケンス図
 アクターやオブジェクト間の「対話」を表す
 メッセージパッシング
4
例題︓図書館情報システム
 クラス図
冊 借出 利⽤者
アイ ⽒名︓⽂字列
資料ID︓数字列 テム 貸出⽇︓⽇付 借出者
ID番号︓数字列
状態︓書架/貸出中 返却期限︓⽇付 現在借出数︓整数
is貸出OK() 貸出実施() is借出OK()
貸出() 返却実施() 借出()
* 冊 *
所蔵される
実施する
1 書籍
1 担当者
書籍
題⽬︓⽂字列
図書館員
ISBN︓ISBN番号 ⽒名︓⽂字列
出版⽇︓⽇付 ID番号︓数字列

1..* 著書
執筆する
1..* 著者
作家
5
名前︓⽂字列
ユースケースとは
 ユーザがシステムを「使⽤」する「シナリオ」
「アクター」 ︓システムの利⽤者(⼈間・組織・他のシス
テム)の役割
「ユースケース」 (ユースケース「名」)︓
 基本的に「対象物」+「 動詞」で表す 図書館情報システム
• アクターが主語.アクターが〜を...する 本を貸し
 ユースケース図に書かれる 出す

ユースケースの「内容」 ︓ 本の返却を
図書館員 受け付ける
 ユーザがシステムを使うときの (貸出担当)
1つの「シナリオ」を表す
ユースケース(名)
• アクターとの「やりとり」を表す アクター
• 「本を貸し出す」ユースケースのシナリオの例︓
(1) 図書館員がシステムに利⽤者と本のIDを与える
(2) システムが貸出OKかどうかを表⽰する
(3) システムが貸出を記録する 6
ユースケース図とユースケースの内容
「ユース
ケース(名) 」 各ユースケースの「内容」

図書館情報システム (a) 本の返却を受け付ける


「アクター」
(b) 図書館員
本を (a) 名称︓本を貸し出す
(c) ...
貸し出す (b) アクター︓図書館員
(f)
(c) ⽬的︓誰にどの本をいつ貸したのか記
本の返却を 録したい.
図書館員
受け付ける (d) 事前条件︓記録なし
(貸出担当)
(e) 事後条件︓記録あり
(f) 基本系列︓
本を登録する (1) 図書館員がIDを与える
(2) システムが貸出OKを表⽰する
図書館員 (3) システムが貸出を記録する
(登録担当) 本を検索する (g) 代替系列︓貸出上限数を越える場合,
貸し出しを拒否する.
本の予約を (h) 具体的シナリオ例︓...
受け付ける

利⽤者

7
ユースケース図
ユースケース図
 ユースケース図が表すもの
図書館情報システム
アクターがシステムを⽤いてやりたいこと
≒ システムがその際になにをするか 本を貸し
≒ システムの「機能」 出す

本の返却を
 「なにが」できるかを表す 受け付ける
 「どのように」ではない 図書館員
本の予約を
概念レベル 受け付ける

なには対象外かを明⽰化する
ことにも使える 本の実在を
チェックする
利⽤者
 主な使い⽅︓要求分析に⽤いる
機能的な「要求仕様」 =システムが実現すべき機能
 ユーザは要求をうまく表現できない
 システム開発者と共同で明確にする
8
ユースケース図は明確にするための表現媒体
ユースケース図の記述 ユース
ケース(名)
 列挙し,明確化することが重要 図書館情報システム

クラス図に現れる概念を⽤いて, アクター 本(冊) を


機能を明確にする 貸し出す

本(冊)
の返却を
 例︓貸し出しの実施者 受け付ける
 例︓書籍と冊の区別 図書館員
• 貸出の対象は? 「冊」 (貸出担当) 本を登録する

• 予約の対象は? 書籍を登録する
• 検索時の情報と結果は︖
冊を登録する
アイ 借出 図書館員
冊 テム 貸出⽇︓⽇付 (登録担当) 本を検索
資料ID︓整数 返却期限︓⽇付 する
状態︓貸出中/書架 貸出実施()
* 冊 返却実施()
* 本の予約を受
所蔵される
実施する け付ける
1 書籍
1 担当者
書籍 利⽤者 「本の準備がで
題⽬︓⽂字列 図書館員 きました」メー
ISBN︓ISBN番号 ⽒名︓⽂字列 ルを送る 9
出版⽇︓⽇付 ID番号︓数字列
ユースケースの内容の記述(1)
各ユースケースごとに内容を記述する
 ※UMLでは規定されていない.簡略化したものを⽰す
(a) ユースケース名(ユースケース図に現れるものと同じ)
 そのユースケースでアクターがシステムを⽤いてしたいこと
 例︓図書館員が本を貸し出す.利⽤者が書籍を予約する.
(b) アクター名
 関わるユーザやシステム.例︓図書館員(貸出担当)
 固有名は書かない.ユーザの「ロール名」を書く
• システムの利⽤者(⼈間,組織,他システム)の役割
 同じ利⽤者でも,貸出⼿続き時は借出者,返却時は返却者
(c) 「⽬的」
 このユースケースでどのような変化を起こしたいか
• 例︓図書館員が(本の状況を管理するために)誰にどの本を
いつ貸したのか記録したい. 10
 (d), (e) の条件(状態)の変化で捉えると分かりやすい
ユースケースの内容の記述(2)
(d) 事前条件
 ユースケースの実⾏が⾏われる前の状態(事前状態)
 例︓貸し出した事実が記録されていない
(e) 事後条件
 ユースケースの実⾏が⾏われた後の状態(事後状態)
 例︓貸し出した事実(利⽤者,本(冊),⽇付)が記録されている
 (c)の⽬的は,⼀般に「事前条件を事後条件に変えること」
(f) 「基本系列(シナリオ)」
 システムとアクターの間の典型的な「対話」 (やりとり)の系列
例
• (1) 図書館員がユースケースを起動する
• (2) システムが図書館員に利⽤者と本(冊)のID を要求する
• (3) 図書館員が利⽤者IDと本(冊)のID を提⽰する
• (4) システムは利⽤者が借出可能であることを確認する 11

• (5) システムは貸出(利⽤者ID, 冊ID, ⽇付)を記録する


ユースケースの内容の記述(3)
(g) 代替系列
 例外的な(エラー時など)対話の系列
 例︓基本系列の(4)で利⽤者が貸出上限数を越える場合,
貸し出しを拒否する.(5)は⾏わない
(h) 具体的シナリオ例
 具体的に,インスタンスが⾏う⾏為列を書いてみる.
 エラーや例外的なケースも含むように書く
 例︓
• (ア) 來村が2019年4⽉24⽇に「⿅の王」を借りるために,貸出カウン
ターに来た.図書館員がシステムを起動する.システムが利⽤者IDと本
IDを要求する.図書館員が來村のIDと,本のIDをシステムに読み込ませ
る.來村のIDは有効で,現在貸出数は0だったので,貸出処理は成功し,
(UID0123, BID0789, 2019/4/24)という記録が残った.
• (イ).... 來村の現在貸出数が上限の10だったので,貸出は拒否された.
• (ウ).... 來村のIDは無効(期限切れ)だったので,拒否された.
12
ユースケースの内容の記述(4):注意点
書いてはいけないこと
 システム内部の動作を書かない
• あくまで外部的観点(≒ユーザ⽬線)からシステムを捉える
 「どうやって」⽬的/機能を達成するかを書かない.
 ユーザインターフェイスを規定しない
• 例︓どうやって利⽤者IDを読み取るか
 磁気ストライプやバーコードなど.
これらは「詳細設計時」に決めること
 概念設計段階では決めない
 ⼤きくシステムが達成すべきことを決めることに集中する
アクターやシステムの「対話」(やりとり)に注⽬する
 どういう内容の情報(データ)がやりとりされるか
• 例︓利⽤者IDや本ID (表現のされ⽅は問わない)
 どういう「流れ」で対話が進むか 13

• あまり細かい制御の流れは書かない.典型的なシナリオを中⼼に書く.
ユースケースのまとめ
 アクターがシステムを使⽤するシナリオ
アクター︓システムの利⽤者のロール
ユースケース名︓アクターの⽬的 ≒ システムの機能
 ユースケース図で書かれる
ユースケースの内容︓アクターとの「やりとり」を表す
 システムがユーザによってどのように使われるか
 ⽬的︓システムの外的な機能要求を明確にする

ユース 図書館情報システム 各ユースケースの内容


ケース図 (a) 本の返却を受け付ける
本を貸し (b) 図書館員
(a) 本を貸し出す
出す (c) ...
(b) 図書館員
(f)
(c) ...
本の返却を
受け付ける (f) (1) 図書館員がIDを与える
図書館員
(貸出担当)
(2) システムが貸出OKを表⽰する
14
(3) システムが貸出を記録する
アクター ユースケース(名)
テーマと流れ(再掲)
 外部的観点からの動的モデル
 外部的観点︓システムを外部から捉える
 動的︓時間を明⽰的に扱う
ユースケース図
 機能的要求,使⽤シナリオ
 内部的観点からの動的モデル
アクティビティ図
 内部的観点から「処理(オブジェクトの動作)の流れ」を表す
 外部的観点からの「ワークフロー」の表現にも使われる
次 シーケンス図
 アクターやオブジェクト間の「対話」を表す
 メッセージパッシング
15
アクティビティ図
「アクション」
 オブジェクトのひとつの活動/処理/動作
 振る舞いと呼ばれる
 ⾓丸⻑⽅形で⽰す アクション

「アクティビティ」図 貸し出し要請
を受ける
 アクションの間の時間的流れ 利⽤者
(制御の流れ/プロセス)を表す 「登録され 登録を
ていない] する
 基本︓ひとつのアクションの 「利⽤者登録
動作が完了したあと,次の されている]

アクションの動作が開始される
本の 利⽤者の
 順序を実線の⽮印で⽰す コードを IDを読み
読み取る 取る
• 「制御フロー」と呼ばれる
 アクションの「系列」(「 アク
貸し出しを
ティビティ」と呼ぶ)を表す 記録する
 処理の分岐や合流,並列なども 16
表現できる.
アクティビティ図の要素(1)
開始ノード/終了ノード
開始ノード
 開始ノードから終了ノードへ処理が流れる
「ディシジョン」ノード
 状態によって処理の流れが分岐する
ディシジョン 貸し出し要請
 「菱形」で分岐点を表す ノード
を受ける

 1つの⼊⼒フローと,複数の出⼒フロー [利⽤者登録さ
れていない]
 出⼒フローには条件(ガード)を書く [登録され
• [ ] 内に論理式を書く ている] 利⽤者
登録を
• ガード条件は排他的OR (XOR) する
• [else]は,他の全ての条件が偽で
あるときに真となる,ことを表す. マージ
 実⾏条件付きのアクション系列 ノード
貸し出しを
(アクティビティ)を表す 記録する

「マージ」ノード
 判断(分岐)によって⽣じた条件つき
振る舞いの終了を表す 17

 菱形.複数の⼊⼒フローと1つの出⼒フロー 終了ノード
アクティビティ図の要素(2)
並列動作の表現 初期状態
フォーク
「フォーク」ノード ノード
 以下のアクティビティの実⾏が 貸し出し要請
「並列的」でもよいことを表す を受ける
アクション
 太い棒線で表す
• 1つの⼊⼒フローと複数の アクション 本の 利⽤者の
出⼒並⾏フローを持つ 系列 コードを IDを読み
読み取る 取る
 次の太い棒線(ジョイン)までの
複数のアクション系列(アクティ
本が貸出OK
ビティ)を表す かどうかを
利⽤者が借出
OKかどうかを
 各系列内のアクションの順序のみを チェックする チェックする

規定する.系列の間の実⾏順序は
規定されない(どちらが先でもよい)
貸し出しを
 守るべき本質的な順序だけを規定する. 記録する
(規定されていない順序は実装時または
実⾏時に決めてよい) 18

終了状態
アクティビティ図の要素(3)
「ジョイン」ノード
 太い棒線で表す
• 複数の⼊⼒フローと 貸し出し要請
1つの出⼒フローを持つ を受ける

 複数のアクション系列 フォーク
(アクティビティ)の
アクション
流れをまとめる 本の 利⽤者の
コードを IDを読み
 全てのアクション系列の 読み取る 取る
実⾏の終了を待つ. アクション
 全てが終了したときに, 系列 本が貸出OK 利⽤者が借出
かどうかを OKかどうかを
出⼒側フローが実⾏される. チェックする チェックする
 「実⾏の同期化」と呼ばれる.
並列アルゴリズムの実装 ジョイン 貸し出しを
 複数スレッドの開始を 記録する

フォークで表す
 実⾏の同期をジョインで表す 19
アクティビティ図の要素(4)
パーティション
パーティション名
「パーティション」
借出 利⽤者
 アクティビティの実⾏主体と
なるアクター,または,
オブジェクトを表す 貸し出し要請
を受ける
• 例︓「利⽤者登録」メソッド
は利⽤者オブジェクトが [登録され
処理する. ていない]
[利⽤者登録
 複数の実⾏主体がある場合に, されている] 利⽤者
区別するために⽤いる. 登録を
する

貸し出しを
記録する

20
アクティビティ図の⽤途
 (1) システムの内部的な処理の流れを表す
内部的観点
情報システムが内部的にどう動くかを表す
オブジェクト間の処理の流れの時間的タイミングを表す
フローチャートに似ている
設計フェイズの後半の詳細設計で⽤いられる
 (2) 対象世界のワークフローを表す
外部的観点
概念設計で⽤いる
各アクションは対象世界で⼈や組織が⾏っている
仕事や処理を表す
仕事の流れ(ワークフロー) 21
「ワークフロー」の表現
図書館員 図書館員
利⽤者 (貸出担当) (登録担当)
 処理の流れと
分担を表す
本を書架で取る
区画はアクター
「利⽤者
(⼈)を表す 登録なし] 利⽤者
登録を
組織の場合も する
本をカウン
ある ターで出す 貸し出し要請
を受ける
アクションは
⼈の⾏為を 本のコードを
読み取る
表す 利⽤者カードを
カウンターで出す
利⽤者のIDを
読み取る

22
まとめ
 外部的観点からの動的モデル
 外部的観点︓システムを外部から捉える
 動的︓時間を明⽰的に扱う
ユースケース図
 アクターがシステムを使⽤するシナリオ
 システムの機能,アクターとのやりとり
 内部的観点からの動的モデル
アクティビティ図
 内部的観点から「処理(オブジェクトの動作)の流れ」を表す
 外部的観点からの「ワークフロー」の表現にも使われる
次 シーケンス図
 アクターやオブジェクト間の「対話」を表す
23
 メッセージパッシング
参考⽂献
 [1] 児⽟公信(著),UMLモデリングの本質,⽇経BP社,
2004
 [2] マーティン・ファウラー(著),⽻⽣⽥ 栄⼀ (翻訳) ,
UMLモデリングのエッセンス(第3版),翔泳社,2005
 [3] かんたんUML⼊⾨ 改訂2版,技術評論社,2017

 ※特に図書館情報システムのUML図は [1] を参考にして,


改変した.ユースケースの内容の記述は,UMLで規定されて
いないため,[1]をベースにしつつ,[2]の知⾒と[3]の最新
の規定を取り⼊れて,⼤幅に改変した.

24

You might also like