分析モデルの作成 第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 概念レベルクラス図 • 重要な概念をクラスとしてモデル化する。 • 結果として、システムの静的な構造がモデ ル化できる。 – みんなの考えているシステムの構造を共有化 できる。 – この構造にあるオブジェクトがメッセージ交換 することによって、ユースケースが実現する。 • メッセージは来週。
© Copyright 2024 ExpyDoc