オブジェクト指向モデリング [11] 2003年12月16日.

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

All Rights Reserved Copyright © 2004, Takashi Kobayashi 1 ロバストネス分析の演習問題 <問題1> 次の文をよんで問いに答えよ。 顧客は、 ATM により自分の口座から預金を払い出す。 顧客は、 ATM にキャッシュカードを挿入し、個人認証を行う。
Chapter1 UML の概要とオブジェクト指向の基本概念 1 情報工学専攻 MFM10004 奥平 健太.
第 5 章 総合的会計情報システムにおける 管理会計 1. ERP パッケージとは何か 2. ERP パッケージと管理会計 3. ERP パッケージ導入の効果.
第4章 ABC/ABMと原価情報 原価計算・原価低減の新技法 1.ABCとは何か 2.ABCの有効性 3.ABMとは何か 4.ABMの有効性.
4 相互作用図 後半 FM13001 青野大樹.
ソフトウェア工学特論III 第10回 その他の図 情報通信工学専攻 GM11013 堀江 真史
オブジェクト指向プログラミング(4) 静的分析(2)
サプライ・チェインの設計と管理 第9章 顧客価値とサプライ・チェイン・マネジメント pp
流通と営業.
クラスその2∽(アドバンス)∽ 福岡工業大学  梶原 大慈       .
CHAPTER1 UMLとオブジェクト指向の基本概念(2)
UMLの概要と オブジェクト指向の 基本概念
47070 オブジェクト指向モデリング [11] 2002年1月8日.
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
ユースケース図2-4~ FM11012 中島拓也.
UML入門 UML PRESS vol.1 より 時松誠治 2003年5月19日.
ユースケース オブジェクト指向の要求分析のためのモデル。 スウェーデンのイヴァー・ヤコブソンが1990年代前半に開発。
「経理・財務サービス スキルスタンダード研究開発事業」
47070 オブジェクト指向モデリング [12] 2002年1月15日.
47070 オブジェクト指向モデリング [13] 2003年 1月21日.
47070 オブジェクト指向モデリング [4] 2001年10月23日.
オブジェクト指向モデリング [3] 2003年10月14日.
チーム FSEL 立命館大学情報理工学部 ソフトウェア基礎技術研究室
47070 オブジェクト指向モデリング [1] 2001年10月2日.
~手続き指向からオブジェクト指向へ[Ⅱ]~
第11回 アプリケーションの構成 ~CUI自動販売機の完成!~.
ソフトウェア工学 知能情報学部 新田直也.
47070 オブジェクト指向モデリング [1] 2002年10月1日.
47070 オブジェクト指向モデリング [6] 2001年11月13日.
その他の図 Chapter 7.
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
UMLの概要とオブジ工クト指向の基本概念 第2回
47070 オブジェクト指向モデリング [7] 2001年11月 12日.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
社会シミュレーションのための モデル作成環境
オブジェクト指向モデリング [2] 2003年10月 7日.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
All Rights Reserved, Copyright © 2004, Kobayashi
11.3 酒屋の在庫問題(8) ユースケース 仕入販売支援システム 11. モデリング 受注する 入庫を記録する 在庫を引き当てる 受付係
47070 オブジェクト指向モデリング [3] 2001年10月16日.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
RDFの生産工程管理システムへの適用 情報処理学会 第74回全国大会 2012年3月6日 松江工業高等専門学校  情報工学科 越田 高志.
オブジェクト指向モデリング [12] 2004年1月13日.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
All Rights Reserved, Copyright © 2004, Kobayashi
サブゼミ第7回 実装編① オブジェクト型とキャスト.
47070 オブジェクト指向モデリング [8] 2002年12月 3日.
「経理・財務サービス スキルスタンダード研究開発事業」
オブジェクト指向モデリング [9] 2003年12月2日.
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
47070 オブジェクト指向モデリング [3] 2001年10月15日.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
47070 オブジェクト指向モデリング [10] 2001年12月18日.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
マーケティング・チャンネル戦略.
オブジェクト指向モデリング [13] 2004年1月20日.
Presentation transcript:

オブジェクト指向モデリング [11] 2003年12月16日

10.2 活動図(6) プロセス図の課題 記法(活動図の拡張) 利益の源泉は何か 回転率を上げる(速い,安い,うまい) 10. 状態モデル 10.2 活動図(6) プロセス図の課題 記法(活動図の拡張) 利益の源泉は何か 回転率を上げる(速い,安い,うまい) ムダを出さない(予測型か調整型か) 予測(見込み生産) 実績(調理と販売) 中間製品で在庫するが,カスタマイズしない 価値の移動 物流と金流 付加価値 接客←従業員教育 素材 店舗の立地

11.6 揺さぶり(1) モデルの洗練 要求のエスカレーション 変更に強いモデルにする 本質的なモデルを追求する 11. 静的モデル4 店長 カテゴリ別の商品別売上げを得る 日別の商品別売上げを得る 調理係 商品ごとの調理時刻を記録する 窓口係 日別の利益額を得る 作り置きがあればそこから出庫する 作り置きがあればそこから出庫する

11.6 揺さぶり(16) 汎化も使って概念を整理 商品 明細 取引 現物 /売上 製造 廃棄 販売 カテゴリ 客タイプ 11. 静的モデル4 11.6 揺さぶり(16) 汎化も使って概念を整理 導出: the/売上.製造原価は,the明細.the取引とナビゲートして得られる取引オブジェクトの集合のうち,それぞれのサブタイプが「製造」または「廃棄」で,その日時の日が,the/売上.日と一致するものについて,the明細.数量を合計したものにこの原価を乗じて得る 商品 1 明細 商品名 単価 原価 数量 /金額 * 取引 日時 現物 ロット番号 /賞味期限 /売上 /売上金額 /製造原価 /利益 日 製造 廃棄 消費税はどうする 販売 {導出} カテゴリ 名称 客タイプ 性別 年齢層

シラバス 授業計画 回 月日 内容 1 9月 30日 オリエンテーション:モデルとは何か。 2 10月 7日 モデリング言語:UMLの概要 オブジェクト指向モデリング シラバス 授業計画 回 月日 内容 1 9月 30日 オリエンテーション:モデルとは何か。 2 10月 7日 モデリング言語:UMLの概要 3 10月14日 静的モデル1:概念とクラス 4 10月21日 静的モデル2:関連 5 10月28日 静的モデル3:オブジェクト図 6 11月 4日 静的モデル3:オブジェクト図(続き),モデリング 7 11月11日 機能モデル1:ユースケース,シナリオ 8 11月18日 機能モデル2:要求抽出,協調図,シーケンス図,状態モデル:状態図 9 12月 2日 機能モデル2:活動図,静的モデル4:ユースケースに基づくモデリング 10 12月 9日 静的モデル4:モデルの揺さぶり 11 12月16日 実装レベル:実装モデルとプログラム,モデリング1:アナリシスパターン 12 1月13日 モデリング2:デザインパターン,モデル図の作成,モデルの評価基準 13 1月20日 モデリング3:例題によるモデル図の作成

12. 概念モデルから実装まで 12.1 実装作業の概要 12.2 ユースケース 12.3 ドメイン層の実装 オブジェクト指向モデリング 12. 概念モデルから実装まで 12.1 実装作業の概要 12.2 ユースケース 12.3 ドメイン層の実装 12.4 アプリケーション層の実装 12.5 ユーザインタフェース層の実装 12.6 プログラミング

12.1 実装作業の概要(1) ソフトウエアプロセス フェーズとワークフロー 繰り返し 方向づけ 推敲 構築 移行 要求 分析 設計 制作 12. 概念モデルから実装まで 12.1 実装作業の概要(1) ソフトウエアプロセス フェーズとワークフロー 繰り返し 方向づけ 推敲 構築 移行 要求 分析 設計 制作 検査

12.1 実装作業の概要(2) ドメインの実装 機能の実装 アーキテクチャの実装 レイヤー構造 ユーザインタフェース 12. 概念モデルから実装まで 12.1 実装作業の概要(2) ドメインの実装 機能の実装 アーキテクチャの実装 レイヤー構造 役割の分担 人工物の作り込み ユーザインタフェース アプリケーション(機能) アプリケーション(機能) ドメイン(概念の世界) ドメイン(概念の世界) 永続化 概念レベル 実装レベル

12.1 実装作業の概要(3) レイヤリングアーキテクチャ 関心の分離 一方向の参照 ドメインを純粋に保つ ユーザインタフェース M-V-C 12. 概念モデルから実装まで 12.1 実装作業の概要(3) レイヤリングアーキテクチャ 関心の分離 一方向の参照 ドメインを純粋に保つ ユーザインタフェース M-V-C アプリケーション(機能) ドメイン(概念の世界) 永続化

12.2 ユースケース(1) ユースケース記述と現実の世界 情報システムとの対話と現実の活動 ユースケースの例 現実の世界 12. 概念モデルから実装まで 12.2 ユースケース(1) ユースケース記述と現実の世界 情報システムとの対話と現実の活動 ユースケースの例 ユースケース名:販売を記録する アクタ:窓口係 目的: 事前条件:その販売実績は記録されていない。 基本系列:  ①アクタがこのユースケースを起動する。  ②システムは販売した商品,数量,顧客タイプを指示  ③アクタはそれらの値を提示する。  ④システムはそれらの値と日時,担当者を記録する。 代替系列:なし。 事後条件:その販売実績が記録されている。 備考:  ①顧客タイプとは,顧客の分類で,性別×年齢層・・   ②担当者情報は,このユースケース起動以前に・・  ③一度の取引に複数の商品が関わることがある  ④注文が終わると,システムは料金を表示する 現実の世界 ①窓口で客がメニューに基づいて商品を  注文する ②受注担当が注文を聞いて,キッチン担  当(調理係)に渡す ③客は注文品ができるまで,窓口で待つ ④受注担当は,料金を計算し,請求する ⑤客は料金を支払う(窓口係は受け取る) ⑥客はできあがった商品を受け取る

12.2 ユースケース(2) ユースケースによる型モデルの検証 シーケンス図,協調図の始点 12. 概念モデルから実装まで 販売を記録する 窓口係 販売を記録する 日別の商品別売上げを得る 店長 カテゴリ別の商品別売上げを得る 日別の利益額を得る 調理係 商品ごとの調理時刻を記録する

12.3 ドメイン層の実装(1) エスカレーションの戻し 参照方向の限定 12. 概念モデルから実装まで 商品 明細 取引 現物 /売上 商品名 単価 原価 数量 /金額 * 取引 日時 現物 ロット番号 /賞味期限 /売上 /売上金額 /製造原価 /利益 日 製造 廃棄 販売 {導出} カテゴリ 名称 客タイプ 性別 年齢層

12.3 ドメイン層の実装(2) 多重分類の解決 12. 概念モデルから実装まで 顧客 一般 重要 法人 個人 《多重》 (b) 単一分類 個人重要 個人一般 法人重要 法人一般 顧客 一般 重要 法人 個人 《多重》 (b) 単一分類 インスタンス:  個人/法人  重要/一般 顧客タイプ カテゴリ 1 * 顧客 (a) 多重分類 (c) タイプクラス

12.3 ドメイン層の実装(3) 動的分類の解決 12. 概念モデルから実装まで 貸し出し 貸し出し state 1 * 1 《動的》 貸出中 返却済み 貸出中 返却済み (a) 動的分類 (b) stateクラス

12.4 アプリケーション層の実装(1) ユースケースの本体 アプリケーションファサード(Application Facade) 12. 概念モデルから実装まで 12.4 アプリケーション層の実装(1) ユースケースの本体 アプリケーションファサード(Application Facade) ドメインクラスのコピー,ビュー 排他制御 アプリケーションロジック Reciept _transaction Receipt() addLineItem() setCustomer() getSoldProducts() sumSales() commit() CustomerFacade _customer toString() CategorySales _category _date CategorySales() getName() getTotal() $getAllCategorySales() ProductSales _product ProductSales() ProductFacade() getDate() $getAllSales() LineItemFacade _lineItem LineItemFacade() Sales ドメイン アプリケーション Transaction * LineItem Product Category Customer ProductFacade

12.4 アプリケーション層の実装(2) シーケンス図による責務の配置 メッセージ(インタフェース)の設計 ユースケース「販売を記録する」 12. 概念モデルから実装まで 12.4 アプリケーション層の実装(2) シーケンス図による責務の配置 メッセージ(インタフェース)の設計 ユースケース「販売を記録する」 theActor sell:Usecase : Reciept :Transaction :LineItem : Product 起動 new new 商品,数量 addLineItem( ) $getProduct( ) LineItem( ) addLineItem( ) [注文あり] [注文終わり 会計 setCustomer( ) setCustomer( ) commit( )

12.4 アプリケーション層の実装(3) シーケンス図による責務の配置 メッセージ(インタフェース)の設計 12. 概念モデルから実装まで 12.4 アプリケーション層の実装(3) シーケンス図による責務の配置 メッセージ(インタフェース)の設計 ユースケース「商品別に売上集計する」 売上:Usecase : Product : /Sales : LineItem : Transaction theActor new(prod.,date) getSales( ) getTotalQuantity(date) $getTotalQuantity(this, date) $getSoldDate(LineItem) 商品別集計 getProduct( ) getName( ) [forAll] getPrice( ) [LineItemあり] そのprodを参照しているLineItemを取り出して そのLineItemの日がdateと等しければ そのLineItemの数量を累積する その累積数量に単価を掛ける

12.5 ユーザインタフェース層の実装 ユーザインタフェース層 12. 概念モデルから実装まで ユーザインタフェース アプリケーション Test _date Sell() showSales() setDate() アプリケーション Sales getName() getTotal() ProductSales CategorySales Reciept _date ProductFacade LineItemFacade CustomerFacade _product _category _date _transaction _product _lineItem _customer ProductSales() CategorySales() Receipt() getTotal() getName() ProductFacade() LineItemFacade() addLineItem() toString() ProductFacade() toString() getTotal() toString() setCustomer() getName() $getAllCategorySales() getSoldProducts() getDate() sumSales() $getAllSales() commit()

12.6 プログラミング(1) インスタンスの生成と管理 クラスオブジェクト インスタンスオブジェクト 参照の方向 = 12. 概念モデルから実装まで 12.6 プログラミング(1) インスタンスの生成と管理 クラスオブジェクト インスタンスオブジェクト 参照の方向 :Transaction _date=021112 a:Transaction = :Product :Category :Transaction :LineItem :Customer 1:Category 1:Product 1:LineItem 1:Transact F20:Cust 2:Product 2:LineItem 2:Category 3:Product 3:LineItem 4:LineItem 2:Transact M30:Cust

12.6 プログラミング(2) リンクの実装 constructor LineItem Transaction * * 12. 概念モデルから実装まで 12.6 プログラミング(2) リンクの実装 public class Transaction{ private Date _date; private Customer _customer; private Vector _lineItems; private static Vector $transactionList = new Vector();   public Transaction( Date date ){ _date = date; _lineItems = new Vector(); $transactionList.add(this); }   public void addLineItem( LineItem lineItem ){ if(lineItem != null){ _lineItems.add( lineItem ); public void setCustomer( Customer customer ){ _customer = customer; constructor $lineItems $transactionList :LineItem :Transaction 1:LineItem 1:Transaction _lineItems 2:LineItem 4:LineItem 2:Transaction LineItem Transaction _date _customer _lineItems $transactionList _product _quantity $lineItems * *

ui application domain :LineItem :Transaction バーガー :ProductSales $getSoldDate(this) :LineItem :Transaction $getTotalQuantity(バーガー, 11日) sales.getTotal() getTotalQuantity(11日) ui バーガー :ProductSales バーガー :Product :LineItem qtty=3 :Transaction date=11日 application domain :LineItem qtty=1 :LineItem qtty=1 :Transaction date=12日 public class ProductSales implements Sales { public int getTotal() { return _product.getTotalQuantity(_date) * _product.getPrice(); } public class Product{ public int getTotalQuantity(Date date){ return LineItem.$getTotalQuantity(this, date); } public class LineItem{ public static int $getTotalQuantity(Product product, Date date){ int _totalQuantity = 0; Iterator iter = $lineItems.iterator(); while(iter.hasNext()){ LineItem _lineItem = (LineItem)iter.next(); if( _lineItem._product == product ){ if( Transaction.$getSoldDate(_lineItem).equals(date) ){ _totalQuantity += _lineItem._quantity; } return _totalQuantity;

オブジェクト指向モデリング 13. 概念モデルの理解 13.1 アナリシスパターン 13.2 責任関係 13.3 勘定

13.1 アナリシスパターン(1) Fowler, M.,”Analysis Patterns” よいモデル例 分析に現れるパターン 13. 概念モデルの理解 13.1 アナリシスパターン(1) Fowler, M.,”Analysis Patterns” 分析に現れるパターン 要求のエスカレーション 変更に強いモデル 知識レベル 制約記述 実装の考慮 アプリケーションファサード サポートパターン よいモデル例

13.1 アナリシスパターン(1) アナリシスパターン サポートパターン 責任関係(Accountability) 観測と測定 13. 概念モデルの理解 13.1 アナリシスパターン(1) アナリシスパターン 責任関係(Accountability) 観測と測定 企業財務の観測 オブジェクトへの参照 在庫管理と会計(Account) 会計モデルの利用 計画 トレーディング デリバティブ トレーディングパッケージ サポートパターン 情報システムの層別化アーキテクチャ アプリケーションファサード 型モデル設計テンプレートのためのパターン 関連パターン

13.2 責任関係(1) 責任関係(accountability)パターン 明示的なレベルを持った組織 変更に弱い 13. 概念モデルの理解 13.2 責任関係(1) 責任関係(accountability)パターン 明示的なレベルを持った組織 変更に弱い 操作(メソッド)の重複,類似の属性 オブジェクト(インスタンス)図 事業部 地域 * 1 営業所 部門 売上 コーヒー:事業部 首都圏:地域 神奈川:部門 藤沢:営業所 川崎:営業所 東京:部門

13.2 責任関係(2) 階層関係を持つ組織 類似の操作,属性はスーパタイプに持つ 制約の変更が煩わしい マトリックス組織にはどう対応する? 13. 概念モデルの理解 13.2 責任関係(2) 階層関係を持つ組織 類似の操作,属性はスーパタイプに持つ 制約の変更が煩わしい マトリックス組織にはどう対応する? {階層} 親 0..1 子 制約: 組織 制約:  親は持たない * *  親は部門 事業部 地域 部門 営業所 制約: 制約:  親は事業部  親は地域

コーヒー:事業部 首都圏:地域 神奈川:部門 藤沢:営業所 川崎:営業所 東京:部門 親 子

13.2 責任関係(3) 2系統の階層 制約変更の煩わしさが2倍に 組織 子営業 親営業 親サービス 子サービス 事業部 地域 部門 営業所 13. 概念モデルの理解 13.2 責任関係(3) 2系統の階層 制約変更の煩わしさが2倍に 組織 * 子営業 親営業 親サービス 子サービス 事業部 地域 部門 営業所 サービス部門 サービス地域 サービスチーム サービスセンタ 制約:  親営業は部門  親サービスはサービスセンタ,親営業は営業所 制約: {階層}

コーヒー:事業部 首都圏:地域 神奈川:部門 藤沢:営業所 川崎:営業所 東京:部門 親営業 子営業 東京:サービス部門 藤沢:サービスセンタ 藤沢:サービスチーム 川崎:サービスチーム 横浜:サービスセンタ 首都圏:サービス地域 神奈川:サービス部門 親サービス 子サービス

13.2 責任関係(4) 関連型の使用 組織構造の制約は,組織構造の変化に敏感 事業部 地域 部門 営業所 営業組織 サービス組織 13. 概念モデルの理解 13.2 責任関係(4) 関連型の使用 組織構造の制約は,組織構造の変化に敏感 事業部 地域 部門 営業所 インスタンス:  営業組織  サービス組織 制約:  営業所の親は部門….  サービスチームの親は営業所およびサービスセンタ…. 期間 組織構造型 組織 組織構造 1 * 親 子 型 有効期間 サービスチーム

神奈川:部門 藤沢:営業所 川崎:営業所 営業組織:組織構造型 親 子 藤沢:サービスセンタ 藤沢:サービスチーム 川崎:サービスチーム 横浜:サービスセンタ :組織構造 神奈川:サービス部門 サービス組織:組織構造型 :期間 2001/10/1 _ 2002/1/22

13.2 責任関係(5) 「組織構造型」と「ルール」 組織構造型ごとのルール 組織の変化に弱い 事業部 地域 部門 営業所 期間 組織構造型 13. 概念モデルの理解 13.2 責任関係(5) 「組織構造型」と「ルール」 組織構造型ごとのルール 組織の変化に弱い 事業部 地域 部門 営業所 期間 組織構造型 組織 組織構造 1 * 親 子 型 有効期間 サービスチーム ルール

神奈川:部門 藤沢:営業所 川崎:営業所 営業組織:組織構造型 親 子 藤沢:サービスセンタ 藤沢:サービスチーム 川崎:サービスチーム 横浜:サービスセンタ :組織構造 神奈川:サービス部門 サービス組織:組織構造型 :期間 2001/10/1 _ 2002/1/22 営業組織型:ルール 営業所の親は部門,部門の親は地域,... サービスチームの親は営業所およびサービスセンタ,サービスセンタの親は,….

13.2 責任関係(6) 組織階層を「責任関係」として一般化 依頼者→実行者 Customer-Performerの関係 責任関係型 13. 概念モデルの理解 13.2 責任関係(6) 組織階層を「責任関係」として一般化 依頼者→実行者 Customer-Performerの関係 人 組織 責任関係型 期間 パーティ 責任関係 * 1 型 実行者 依頼者 有効期限

13.2 責任関係(7) 知識レベルと操作レベル パワータイプ(ベキ型) 操作レベルの型の制約を記述 鏡像関係 人 組織 期間 作業 13. 概念モデルの理解 13.2 責任関係(7) 知識レベルと操作レベル パワータイプ(ベキ型) 操作レベルの型の制約を記述 鏡像関係 知識レベル 操作レベル 人 組織 期間 作業 パーティ 責任関係 1 * パーティ型 責任関係型 型 1..* 実行者 依頼者 有効期限 inv:  let collx:set(責任関係)=self.the責任関係 in  collX->forALL( x | x.型.依頼者->includes(x.依頼者.型) and x.型.実行者->includes(x.実行者.型))

シナリオ 同意:責任関係 患者:鈴木一郎は医師:山本太郎との間で,2001年12月18日に内視鏡検査を受けることについて同意した 依頼者  患者:鈴木一郎は医師:山本太郎との間で,2001年12月18日に内視鏡検査を受けることについて同意した 依頼者 患者 :パーティ型 同意:責任関係型 型 医師 :パーティ型 実行者 型 型 内視鏡検査:作業 :責任関係 依頼者 鈴木一郎 :パーティ :期間 実行者 山本太郎 :パーティ 2001/12/18