PowerPoint プレゼンテーション

分析モデルの作成
第4回
Goal
• クラス図とオブジェクト図を利用して、シス
テムの構造についてコミュニケーションでき
るようになる。
Objective
• 分析をすることの利点を説明できるように
なる。
• クラスとオブジェクトの関係を説明できる
• クラス図が読めるようになる。
– クラス図とオブジェクト図の変換ができるよう
になる。
• ユースケースが与えられたとき、適切に概
念モデルが構築できるようになる。
分析ーシステムの構造を明らか
にする
• 私たちが知っている「もの」ごとに分解して、
システムの構造を明らかにします。
システム
オブジェクト指向は
システムを「もの」の集まりとして
捉える
もの
もの
こ
と
こと
もの
ユースケース 復習
• SFC履修申告システムのイメージ
• 話を単純化するために、履修申告するだけの
システムを考える
目的:学生がある授業を受ける権利をもらうため
イベントフロー:
①履修申告する授業を選択する
学生
履修申告する
②履修申告の内容を確認する
③履修申告する授業を確定する
ユースケースで
やりたいことは分かった
• どんなものを作ればいいか、ユーザからの
視点ではわかった。
• しかし、まだ実装はできない。
– 外見はわかっても、肝心のシステムの構造が
わからない。
– 概念の整理ができていない。
• 「時間割」ってなんですか?
時間割にも色々ある
今回やること
• クラス図を使い、システムの静的な構造を
つかみます。
• システムで出てくる概念を整理し、言葉の
定義をします。
教員
+担当教員
時間割
科目
0..n
0..n
学生
履修申告する
+自由科目
学生
0..n
+履修科目
今回やらないこと
• 分析モデルは、設計モデルとは違います。
分析モデル
設計モデル
焦点
システムはどういう構造
をしているのか?
システムをどう実装して
いけばよいか?
善悪
システムの構造が明ら
かか明らかでないか
実装しやすいかしやすく
ないか
実装
そのままJavaのクラスに
なるとは限らない。
そのままJavaのクラスに
なる。
自動販売機で考える
• 自動販売機は、どういう構造をしています
か?
– どんなオブジェクトが考えられますか?
自動販売機を構成するオブジェ
クト
自動販売
機
ジュース
D
返却レバ
ー
商品名
取扱商品
ジュース
A
ジュースB
購入ボタ
ンA
おつり返
却口
商品種類
商品閲覧
価格
販売
ジュース
C
50円玉
100円玉
A
ソーダの
在庫
コーラの
在庫
おつり
お金
100円玉
B
投入金
購入ボタ
ンB
取り出し
口
商品表示ディ
スプレイ
投入金表示ディ
スプレイ
オブジェクトの種類(1)
自動販売
機
返却レバ
ー
商品名
ジュース
D
おつり返
却口
購入ボタ
ンA
取扱商品 商品種類
今回は自動販売機の中を
商品閲覧
購入ボタ
対象とするので、
ンB
価格
取り出し
ジュースB
口
そのものはオブジェクトにならない
販売
ジュース
A
ジュース
C
50円玉
100円玉
A
ソーダの
在庫
コーラの
在庫
おつり
お金
100円玉
B
投入金
商品表示ディ
スプレイ
投入金表示ディ
スプレイ
オブジェクトの種類(2)
自動販売
機
商品名
返却レバ
ー
ジュース
D
取扱商品 商品種類
<バウンダリ・オブジェクト>
ジュース
商品閲覧
A
価格
インターフェースに関わる
オブジェクト ジュース
C
ソーダの
在庫
↓
50円玉
コーラの
在庫
100円玉
設計レベルまで延ばす
おつり
A
ジュースB
お金
100円玉
B
おつり返
却口
投入金
販売
購入ボタ
ンA
購入ボタ
ンB
取り出し
口
商品表示ディ
スプレイ
投入金表示ディ
スプレイ
オブジェクトの種類(3)
自動販売
機
返却レバ ジュース
<コントロール・オブジェクト>
D
ー
商品名
取扱商品
ジュース
A
商品種類
ビジネスロジック、または、
価格
ジュースB
ユースケースのフローに
関わるオブジェクト ジュース
C
ソーダの
在庫
↓
50円玉
コーラの
在庫
設計レベルまで延ばす
100円玉
A
おつり
お金
100円玉
B
投入金
おつり返
却口
商品閲覧
販売
購入ボタ
ンA
購入ボタ
ンB
取り出し
口
商品表示ディ
スプレイ
投入金表示ディ
スプレイ
オブジェクトの種類(4)
自動販売
機
ジュース
D
返却レバ
ー
商品名
取扱商品
ジュース
A
ジュースB
却口
商品種類
商品閲覧
価格
ジュース
C
50円玉
100円玉
A
購入ボタ
<エンティティ・オブジェクト>
ンA
おつり返
ソーダの
在庫
コーラの
在庫
おつり
購入ボタ
ンB
システムを構成する
取り出し
口
販売
実体オブジェクト、
商品表示ディ
または、概念オブジェクト
スプレイ
↓
投入金表示ディ
スプレイ
分析レベルで定義するべき
お金
100円玉
B
投入金
概念モデルの構築
分析レベルで押さえること
• システムで使われる重要な概念を定義す
る。
– 概念とは?
• システムを明らかにするために、「もの」ごとに分解
する単位。
• 定義されなければならない言葉
• インターフェースや、ビジネスロジック以外の「もの、
こと」
オブジェクトとクラス(1)
商品をオブジェクトとして、図に
いちいち書いていたらきりがない。
ジュース
D
返却レバ
ー
商品名
取扱商品
ジュース
A
ジュースB
価格
50円玉
同じ種類ごとにまとめたい。
クラス
ジュース
C
100円玉
A
商品種類
ソーダの
在庫
商品
コーラの
在庫
おつり
お金
100円玉
B
投入金
在庫
オブジェクトとクラス(2)
クラス
商品
具体化
抽象化
ジュース
A
ジュースB
ジュース
C
オブジェクト
ジュース
D
オブジェクトとクラス(3)
• 逆に、オブジェクトは、クラスから生成され
ると考えることもできる。(鶏と卵)
商品
生成
ジュースA : 商品
オブジェクト化(インスタンス化)
オブジェクト(インスタンス)
オブジェクトとクラス(4)
• まず、クラスありき
– オブジェクト指向では、クラスからオブジェクト
が生成されると考える。
クラス図
商品
クラス名
オブジェクト図
ジュースA : 商品
オブジェクト名
クラス名
商品だけのオブジェクト図
ジュースA :
商品 ジュースB :
商品 ジュースC :
商品 ジュースD :
商品 ジュースE :
商品 種類を考えよう
ジュースA :
商品 種類=“コーラ”
同じ種類のオブジェクトが
共通に持つデータ
ジュースB :
商品 種類=“コーラ”
ジュースC :
商品 種類=“コーラ”
ジュースD :
商品 種類=“ソーダ”
ジュースE :
商品 種類=“ソーダ”
属性
属性をクラス図に加える
ジュースA :
商品 種類=“コーラ”
ジュースB :
商品 種類=“コーラ”
ジュースC :
商品 種類=“コーラ”
ジュースD :
商品 種類=“ソーダ”
ジュースE :
商品 種類=“ソーダ”
商品 - 種類
属性
種類をオブジェクトと考えてはど
うか?
ジュースA :
商品 ジュースB :
商品 種類A : 商品種類 名前=“コーラ”
ジュースC :
商品 ジュースD :
商品 ジュースE :
商品 リンク
種類B : 商品種類 名前=“ソーダ”
オブジェクトと
オブジェクトの
関係を示す。
さて、どちらのモデルがいいです
か?
ジュースA :
商品 種類=“コーラ”
ジュースB :
商品 種類=“コーラ”
ジュースC :
商品 ジュースA :
商品 ジュースB :
商品 種類A : 商品種類 名前=“コーラ”
ジュースC :
商品 種類=“コーラ”
ジュースD :
商品 ジュースD :
商品 種類=“ソーダ”
ジュースE :
商品 種類=“ソーダ”
ジュースE :
商品 種類B : 商品種類 名前=“ソーダ”
何をクラスとするか
• 概念と捉えているものをクラスとする
• ヒント
– オブジェクトがすべてなくなったとき、属性はす
べて消えてしまう。
– 何かを変更するときに、なるべく一つだけにと
どめられるようにする。
– ただの文字列情報や、数値情報の場合は、属
性にする。(場合が多い)
では日付は?
• どちらのモデルがいいですか?
ジュースA :
商品 ジュースA :
商品 10月28日
: 日付
ジュースB :
商品 日付=“10月28日”
種類A : 商品種類 ジュースB :
商品 日付=“10月20日”
種類A : 商品種類 名前=“コーラ”
ジュースC :
商品 ジュースC :
商品 日付=“10月20日”
10月20日
: 日付
ジュースD :
商品 ジュースE :
商品 種類B : 商品種類 ジュースD :
商品 日付=“10月28日”
ジュースE :
商品 日付=“10月20日”
種類B : 商品種類 名前=“ソーダ”
商品種類を導入したクラス図
ジュースA :
商品 日付=“10月28日”
ジュースB :
商品 日付=“10月20日”
種類A : 商品種類 名前=“コーラ”
ジュースC :
商品 商品 - 日付
日付=“10月28日”
ジュースD :
商品 日付=“10月20日”
ジュースE :
商品 商品種類 - 名前
種類B : 商品種類 名前=“ソーダ”
日付=“10月20日”
オブジェクト図
クラス図
クラス間の関係を記述する
関係名
商品
- 日付
実物とメタ情報
商品種類
- 名前
関係線
ロール名
• オブジェクト同士の役割(ロール)
商品
- 日付
実物とメタ情報
+種類
商品種類
- 名前
ロール名
商品から見て、商品種類は、
「種類」という役割を持っている
多重度
実物とメタ情報
商品
- 日付
0..n
+種類
商品種類
- 名前
1
多重度
ジュースA :
商品 日付=“10月28
日”
ジュースB :
商品 日付=“10月20
日”
ジュースC :
種類A : 商品種類 名前=“コーラ”
商品 オブジェクト図
日付=“10月20
日”
ジュースD :
商品 日付=“10月28
日”
ジュースE :
商品 日付=“10月20
日”
種類B : 商品種類 名前=“ソーダ”
ここまでのクラス図
実物とメタ情報
商品 - 日付
0..n
+種類
1
商品種類 - 名前
製造会社をどうするか
クラス図
実物とメタ情報 +種類 商品情報 商品 - 日付
0..n
1
商品 - 日付
実物とメタ情報 +種類
0..n
1
製造会社
- 名前
クラスにした場合
属性にした場合
商品情報
- 名前
- 製造会社
製造会社をどうするか?
オブジェクト図
ジュースA :
商品 ジュースA :
商品 ジュースB :
商品 製造会社A : 製造
会社
名前=“コカコーラ
ボトラーズ”
ジュースC :
商品 ジュースD :
商品 ジュースB :
商品 種類A : 商品情報
種類B : 商品情報
ジュースE :
商品 製造会社=“コカコーラ
ボトラーズ”
ジュースC :
商品 ジュースD :
商品 ジュースE :
商品 クラスにした場合
種類A : 商品情報
種類B : 商品情報
製造会社=“コカコーラ
ボトラーズ”
属性にした場合
選んだモデル
• 理由
– 「製造会社」という概念は今回、重要ではない。
• 製造会社はただのテキスト情報でよい。
• 「製造会社」を比較したり、場所がどうの、、、どな
れば、製造会社はクラスにする必要がある。
商品 - 日付
実物とメタ情報 +種類
0..n
1
商品情報
- 名前
- 製造会社
在庫を考える
• オブジェクト図から考えます。
ジュースA :
商品 コーラの在庫 :
在庫
ジュースB :
商品 種類A : 商品情報
ジュースC :
商品 ソーダの在庫 :
在庫
ジュースD :
商品 ジュースE :
商品 種類B : 商品情報
在庫を入れたときのクラス図
商品 - 日付
在庫
1
0..n
実物とメタ情報+種類 商品情報
0..n
1
- 名前
- 製造会社
集約
• 関係のうち、特に「~から構成される」とい
うような関係
– 「在庫」は、0~n個の「商品」から構成されて
いる
– ただし、集約と(普通の)関係の境界ははっき
りしない。
商品 - 日付
在庫
1
集約
0..n
実物とメタ情報+種類 商品情報
0..n
1
- 名前
- 製造会社
集約(オブジェクトで考える)
集約は、他のオブジェクト
をまとめた概念に近い。
→オブジェクト図では書けない。
ジュースA :
商品 コーラの在庫 :
在庫
ジュースB :
商品 種類A : 商品情報
ジュースC :
商品 ソーダの在庫 :
在庫
ジュースD :
商品 ジュースE :
商品 種類B : 商品情報
在庫のクラス図
• クラス図とオブジェクト図を見比べて、何か、
疑問に思うことはありませんか?
商品
- 日付
在庫
1
0..n
商品情報
実物とメタ情報
+種類
0..n
1
- 名前
- 製造会社
クラス
図
ジュースA :
商品 ただし、同じ在庫には、同種の商
品しか入らない。
コーラの在庫 :
在庫
ジュースB :
商品 種類A : 商品情報
種類=“コーラ”
ジュースC :
商品 ソーダの在庫 :
在庫
ジュースD :
商品 種類B : 商品情報
種類=“ソーダ”
ジュースE :
商品 オブジェ
クト図
この在庫は、入る商品の種類が
決まっている
どのように表せばよいですか?
ロール名はどのようになりますか?
多重度はどうなりますか?
オブジェクト図ではどうなりますか?
+在庫
1
商品
- 日付
在庫
1
0..n
+種類
1
商品情報
実物とメタ情報
+種類
- 名前
- 製造会社
0..n
1
オブジェクト図
ジュースA :
商品 コーラの在庫 :
在庫
ジュースB :
商品 種類A : 商品情報
ジュースC :
商品 ソーダの在庫 :
在庫
ジュースD :
商品 ジュースE :
商品 種類B : 商品情報
配置を変えると別の見方になる
商品
- 日付
在庫
0..n
1
+在庫
1
+種類
1
商品情報
- 名前
- 製造会社
0..n
+種類
もの
こと
1
もの
実物とメタ情報
→概念モデルの基本パターン
取扱商品を導入する
1
1
商品 - 日付
在庫
1
0..n
商品情報
実物とメタ情報
+種類
0..n
1
- 名前
- 製造会社
0..n
取扱商品とは、
商品の集約ではなく、
商品情報の集約である。
1
取扱商品
取扱商品を入れたオブジェクト
図
ジュースA :
商品 コーラの在庫 :
在庫
ジュースB :
商品 種類A : 商品情報
ジュースC :
商品 ソーダの在庫 :
在庫
ジュースD :
商品 ジュースE :
商品 : 取扱
商品
種類B : 商品情報
排出商品を導入する
1
1
商品 - 日付
在庫
1
0..n
商品情報
実物とメタ情報
+種類
0..n
0..n
1
排出商品
1
- 名前
- 製造会社
0..n
1
取扱商品
お金周りも同様にモデル化する
投入金
排出貨幣
1
1
+投入された貨幣 0..n 0..n
貨幣 0..n
+在庫として持っている貨幣 0..n
1
おつり在庫 1
1 貨幣情報
+種類 - 価値
1
取扱貨幣
0..n
1
全体クラス図
投入金
排出貨幣
1
1
0..n
+投入された貨幣 0..n
0..n
貨幣
+在庫として持っている貨幣 0..n
1 貨幣情報
+種類 - 価値
取扱貨幣
0..n
1
1
1
おつり在庫 1
取扱商品
1
自動販売機の
全体構造がわかる
商品情報
0..n - 名前
- 製造会社
+種類 1
1
実物とメタ情報
1
在庫
1
0..n
商品 - 日付
0..n
0..n
排出商品
1
概念レベルクラス図
• 重要な概念をクラスとしてモデル化する。
• 結果として、システムの静的な構造がモデ
ル化できる。
– みんなの考えているシステムの構造を共有化
できる。
– この構造にあるオブジェクトがメッセージ交換
することによって、ユースケースが実現する。
• メッセージは来週。