問題解決からビジネスモデリングへ

オブジェクト指向モデリング
[6]
2003年11月 4日
5. オブジェクト図
5.2 オブジェクト図(2)
 クラス図を理解する
多重度を手がかりにして
顧客
氏名
生年月日
1
*
注文
注文日
数量
*
1
商品
商品名
単価
a:顧客
1:注文
氏名=小泉純一
生年月日=
注文日=03.11.21
数量=3
b:顧客
2:注文
科目名=クレジット
氏名=間尚人
/残高=
生年月日=
-2000円
注文日=03.11.21
数量=1
c:顧客
3:注文
氏名=田中まきお
科目名=現金預金
生年月日=
/残高= 50000円
注文日=03.11.21
数量=2
d:顧客
4:注文
氏名=児玉公信
科目名=現金預金
生年月日=
/残高= 50000円
注文日=03.11.21
数量=10
1:商品
商品名=フライパン
単価=2000円
2:商品
商品名= ピーターパン
単価=6000円
3:商品
商品名= カレーパン
単価=150円
2
6. 高度な関連
6.1 関連に対する制約(1)
 関連に対する制約
タイトル
 許される関連
 短縮意味宣言
1
*
{xor}
1
{ }制約
{xor}
{ordered}
*
1
路線
 詳細意味宣言
本
{ordered}
*
雑誌
駅
ノート
OCL(Object Constraint Language)
勘定
勘定科目名
/残高
1
*
仕訳記入
金額
2..*
1
取引
取引日
摘要
不変表明:
inv:
self.the仕訳記入.金額->sum
取引にリンクする仕訳記入の金
額の合計は0であること
=0
3
6. 高度な関連
6.1 関連に対する制約(2)
 関連に対する制約
路線
1
{ordered}
*
駅
{DAG}
1
inv:
路線
駅
let 駅順:Sequence(駅)=self.the駅
*
let scan(s:駅)=forAll(index:Integer|
if 駅順->at(index)=s
then result=index) in
山手線(外回り)
大崎:駅
i:Integer=駅順->scan(s:駅)
:路線
next(s:駅):駅=if i=駅順->size
then result=駅順->at(1)
五反田:駅
else result=駅順->at(i+1)
目黒:駅
)
prev(t:駅):駅=if i=1
then result=駅順->at(駅順->size)
else result=駅順->at(i-1)
恵比寿:駅
)
Sequence
山手線(外回り)
:路線
大崎:駅
①
五反田:駅 ②
目黒:駅
③
:
大崎:駅
4
オブジェクト指向モデリング
シラバス
 授業計画
回
1
2
3
4
5
6
7
8
9
10
11
12
13
月日
9月 30日
10月 7日
10月14日
10月21日
10月28日
11月 4日
11月11日
11月18日
12月 2日
12月 9日
12月16日
1月13日
1月20日
内容
オリエンテーション:モデルとは何か。
モデリング言語:UMLの概要
静的モデル1:概念とクラス
静的モデル2:関連
静的モデル3:オブジェクト図
静的モデル3:オブジェクト図(続き),モデリング
機能モデル1:ユースケース
機能モデル2:ユースケース記述,シナリオ
動的モデル:協調図,シーケンス図,状態図,活動図
実装モデル:実装モデルとプログラム
モデリング1:モデル図の理解:アナリシスパターン,事例
モデリング2:モデル図の作成,モデルの評価基準
モデリング3:例題によるモデル図の作成
5
問題解決からビジネスモデリングへ
6. 高度な関連
6.1 関連に対する制約
6.2 関連型
6.3 属性型
6.4 知識レベル
6.5 型についての補足
6.6 型図の演習
6
6. 高度な関連
6.2 関連型(3)
 演習7
関連を含んだ簡単な型図を書いてみましょう。
「ものーことーもの」で表される概念構造で,できるだけユニーク
なものを考えてみてください。ロールに気をつけて。
7
6. 高度な関連
6.3 属性型
 属性かどうか決められない概念
型として書いておく
基本型
人
人
人
氏名
*
1
*
氏名
1
文字列
文字列
人の集合
氏名の集合
氏名
生年月日
血液型
身長
体重
8
6. 高度な関連
6.4 知識レベル(1)
 べき集合(power set)
カテゴリ化
タイトルと本
ジャンル
頭の中にあるオブジェクト
インスタンス:
技術職タイプ
営業職タイプ
○○タイプ,
○○種,
○○名
従業員タイプ
営業職の集合を
意味するメンバ
型 1
従業員タイプの集合
技術職の集合を
意味するメンバ
*
従業員
技術職の
集合
営業職
技術職
営業職の
集合
従業員の集合
9
6. 高度な関連
6.4 知識レベル(2)
 知識レベルの実装
従業員タイプ
1
*
従業員
従業員
従業員タイプ
*
従業員タイプ
+型 1
「クラスによる
タイプコードの置き換え」
技術職タイプ
営業職タイプ
実装
*
従業員
技術職
1
営業職
従業員
タイプ
「サブクラスによる
タイプコードの置き換え」
「State/Strategyによる
タイプコードの置き換え」
「フィールドによる
サブクラスの置き換え」
従業員
概念モデル
技術職
営業職
10
6. 高度な関連
6.5 型についての補足
 ステレオタイプ
 モデル要素の分類
《type》
《interface》
《history》
学生
学生
学生
 事前定義
 新たな分類
《use》
 制約
《include》
 オブジェクトの存在条件
{self.noOfStudents > 10}
inv:
self.the借方.金額->sum
= self.the貸方.金額->sum
 コンテキスト
 self:任意のインスタンス
 プロパティ
 モデル要素のプロパティ
 タグ付き値
isXxxxxxx
取引
取引日
摘要
{isAbstract = true}
{abstract}
11
6.高度な関連
6.6 型図の演習(1)
 演習8
ファーストフード店の窓口業務のモデルを書いてみる。
ファーストフード店
窓口で客がメニューに基づいて商品を注文する
受注担当者が注文を聞いて,キッチン担当に渡す
客は注文品ができるまで,窓口で待つ
受注担当者は,料金を計算し,請求する
客は料金を支払う
客はできあがった商品を受け取る
…という,普通のプラクティス
12
6.高度な関連
6.6 型図の演習(2)
 手順
基本定義から基本課題を発明
する
基本課題からユー
スケースを発明する
ワークフローを書い
て,隠れたユース
ケースを洗い出す
初期の概念モデルを書く
モデルを揺さぶる
疑問点を考える
本質的な概念モデルを導く
13
6.高度な関連
6.6 型図の演習(3)
 初期の概念モデルを書く
 手順
対象領域における概念を取り出す
重要な概念を他の概念との関係で記述する
ロールを識別する
包含する概念(スーパータイプ)か,包含される概念(サブタイプ)か
知識レベルの概念か
属性か
「もの-こと-もの」で書いてみる
多重度を考える
次に重要そうな概念を取り上げて,繰り返す
 名詞抽出法
14