オブジェクト指向による 分析と設計

47070
オブジェクト指向モデリング
[5]
2001年10月29日
オブジェクト指向モデリング
前回 静的モデル1
5.1 型の認識
5.2 関連
5.3 属性と操作
5.4 汎化関係
2
静的モデル1
型の認識
人
型
氏名:String
身長:Real
 概念
 名前を持つ
 境界を持つ
 定義
 属性
人
氏名
氏名:String
1..*
人
 ユニークであること
氏名
String
1..*
 別名でない
 属性でない
 属性か型かは微妙
 基本型
夏目漱石
島崎藤村
 集合
 ユニークなメンバをもつ
 UoD,文脈,視点
芥川龍之介
人
氏名
3
静的モデル1
多重度
 インスタンスどうしの対応(リンク)数
 対応の方向
 0,1,*
 関連はリンクの集合
最小値..最大値
 関連の意味
 メッセージパス
 生成
 参照
 ナビゲーション
本
is a copy of
0..*
1..1
著書
1冊め
実践ファンクション
ポイント法
2冊め
3冊め
リファクタリング
UMLを使って
本
著書
4
質問カードから
 関連の意味はわかるが,多重度の値そのものは意
味がないのでは
 数字として意味があるのは,0,1,* です。
 詳細は次ページ。
 集合図とオブジェクト図
 UMLのオブジェクト図の表現では,部分集合のイメージが
十分表現できません。
顧客
顧客
A:
一般顧客
一般
重要度
一般顧客 重要顧客
B:
重要顧客
B
重要
A
5
静的モデル1
多重度の意味
 プログラミングレベル
最小値..最大値
 リンクの意味
 メッセージパス(ターゲット)
 生成(new)する先
 参照先,ナビゲーション先
is a copy of
蔵書
0..*
1..1
著書
 それが繰り返されることを暗示
 必ずある(必須;mandatory)
 あるかも知れない(任意;optional)
*
カテゴリ
 概念レベルでの意味
 構造の意味を暗示
 こと-もの-こと
 範囲
 属性
 カテゴリ
木
会員
*
*
貸出
*
*
*
蔵書
*
から まで
名前
日時
6
オブジェクト指向モデリング
第5回 静的モデル2
5.1 概念レベルでの特殊な表現
5.2 リファクタリング
テキスト
5.3 オブジェクト図
5.4 関連についての補足
5.5 型についての補足
5.6 依存性
5.7 パッケージ
テキスト
5.8 知識レベル
第5章
第6章
7
静的モデル2
5.1 概念レベルでの特殊な表現
 汎化
顧客
 多重分類
 動的分類
 区画
一般
 完全区画
 不完全区画
個人
重要
制約
{完全}
個人顧客
法人
顧客
弁別子
(discriminator)
個人顧客
法人顧客
重要度
<<多重>>
<<動的>>
ステレオタイプ
重要顧客
一般顧客
8
静的モデル2
5.2 概念レベルでの特殊な表現
 汎化の記法
{完全}
個人顧客
顧客
個人顧客
法人顧客
重要度
{完全}
<<多重>>
<<動的>>
個人顧客
顧客
重要顧客
個人顧客
法人顧客
一般顧客
重要度
重要顧客
<<多重>>
<<動的>>
一般顧客
9
静的モデル2
5.2 概念レベルでの特殊な表現
 開発過程における型モデル
 型モデルからクラスモデルへ
 モデルの観点
 概念レベル・・・・・・型モデル
 多重分類
 動的分類
 仕様レベル・・・・・・シグニチャ
 実装レベル・・・・・・クラスモデル
 単一分類
 静的分類
重要法人
顧客
重要個人
一般法人
一般個人
10
静的モデル2
5.3 リファクタリング
 リファクタリング
 クラス構造の再構築
 責任の再割付
 システム全体の機能を変えない
実装レベル
 自動テスト
 進化的発展
 最初から理想的な型/クラス構造は作れない
 悪構造であることをどう知るか
不吉なにおい
コードの重複,長すぎるメソッド,巨大なクラス,多すぎる引数,変更の発散,変更
の分散,属性・操作の横恋慕,データの群れ,基本データ型への執着,スイッチ文,
パラレル継承,怠け者クラス,疑わしき一般化,一般的属性,メッセージの連鎖,仲
介人,不適切な関係,クラスのインタフェース不一致,未熟なクラスライブラリ,デー
タクラス,相続拒否,コメント
 ボトムアップの段階的改善
11
静的モデル2
演習問題
1. モデルの観点を形式的に判定できるか?
2. ドメイン以外のクラスがあってもよいのはいつ?
ユーザインタフェース
概念レベル
仕様レベル
実装レベル
アプリケーション(機能)
ドメイン(概念の世界)
永続化
12
静的モデル2
クラス図
制約
型
関連名
多重度
関連名の方向
商品種類
0..*
注文する
注文対象
0..*
{完全}
顧客
注文主
個人顧客
法人顧客
関連
ロール
区別子
(discriminator)
個人顧客
重要度
重要顧客
<<多重>>
<<動的>>
ステレオタイプ
一般顧客
13
静的モデル2
5.4 オブジェクト図
 インスタンス
インスタンス名:型名
実践ファンクション
ポイント法: 著書
実践ファンクションポイント法
リファクタリング
UMLを使って
リファクタリング:
著書
UMLを使って:
著書
「著書」型
14
静的モデル2
5.4 オブジェクト図
 インスタンスのコラボレーション
A
A
*
*
B
B
C
D
型C
A1
A1
B1
A2
型A
A2
B2
A3
型B
a1:A
C1
b1:B
b2:B
型A
D1
A3
型B
a1:A
型D
c1:C
d2:D
15
静的モデル2
5.4 オブジェクト図
 型(クラス)図の理解
勘定
勘定科目名
/残高
*
記入
2..*
取引
取引日
摘要
金額
a:勘定
旅費交通費
8000円
11000円
b:勘定
クレジット
2000円
-5000円
0円
1:記入
3000円
2:記入
1:取引
2001.11.6
つくば
-3000円
1:記入
5000円
c:勘定
現金預金
45000円
50000円
2:記入
2:取引
2001.11.31
精算
-5000円
16
静的モデル2
5.5 関連についての補足
 集約(aggregation)
 集約
 部分-全体関係
 関連名(is a part of)は省略
概念レベルでは
区別をしない
 合成集約(composition)
 強い所有
 弱いエンティティ(weak entity)
優等コース
ボード
1..*
1
6..*
9
授業科目
マス
17
静的モデル2
5.5 関連についての補足
 ナビゲーション可能性(navigability)の明示
 双方向
 単方向
顧客
顧客
請求先
1
納入先
1
請求先
1
納入先
1
*
注文
*
注文
*
1
商品
*
*
1
商品
*
演習問題46
ナビゲーション可能性はいつ
決定されるべきか
18
静的モデル2
5.5 関連についての補足
 限定子つき関連(qualified association)
 多重度を1にする
 限定子によって一意になるという制約を示す
 辞書などによる実装を暗示
ボード
1
1
ボード
位置
9
マス
1
マス
*
位置
行
列
行:{1,2,3}
列:{1,2,3}
Class ボード {
public マス getSquareMark(int 行, int 列);
:
}
19
静的モデル2
5.5 関連についての補足
UML
 導出関連(derived association)
 計算で導き出せる関連
「著書」型
 冗長
「/」でマーク
 理解
 ルール(制約)
1
 導出型
 導出属性
 導出ロール
導出ルール:
FP
2
3
4
*
著書
「会員」型
「本」型
/borrows
is a copy of
*
会員
borrows
*
本
20
静的モデル2
5.5 関連についての補足
 関連に対する制約
 短縮意味宣言
ステレオタイプ 《type》
制約 {self.noOfStudents > 10}
プロパティ {isAbstract = true}
 { }制約
 {xor}
 {ordered}{順序}
本
0..*
0..*
1
著作
オブジェクト図を
書いてみよう
{xor}
1
雑誌
路線
{ordered}
*
駅
21
静的モデル2
5.5 関連についての補足
 関連に対する制約
 オブジェクト図
{階層}
*
路線
東海道線:
路線
{ordered}
*
①
②
③
駅
東京:
駅
人
子
親
{階層}がないと
どんなオブジェクト
図が書けるでしょう
新橋:
駅
品川:
駅
④
川崎:
駅
…
22
静的モデル2
5.5 関連についての補足
 制約
 詳細意味宣言
 ノート(注釈)
 OCL(Object Constraint Language)
勘定
勘定科目名
/残高
*
記入
2..*
金額
借方
貸方
取引
取引日
摘要
inv:
self.the借方->sum(金額)
= self.the貸方->sum(金額)
23
静的モデル2
宿題の解答
 兄弟(性別問わず)関係はどう表現する?
24