Download - XP寺子屋 デザインパターン入門
![Page 1: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/1.jpg)
XPJUG関西 / XP寺子屋
1
「デザインパターン入門」
2012.12.21XP寺子屋
![Page 2: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/2.jpg)
XPJUG / XP関西 寺子屋
2
自己紹介
![Page 3: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/3.jpg)
XPJUG / XP関西 寺子屋
3
・名前 : 西 丈善(たけぷ~)
・仕事 : 組み込み系
・業界歴 : 20年
・コミュニティ : XPJUG関西、 PFP関西
・使用言語 : C, C++
・ SNS : Twitter takepu
FaceBook 西 丈善
・宣伝 : ▼アジャイルラジオ 毎週水曜日公開
http://www.agileradio.info/
▼ XP祭り関西 2013 2013年 4月 27開催
http://www.xpjug.jp
▼出張アジャイル社内研修(無料)受付中
![Page 4: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/4.jpg)
XPJUG / XP関西 寺子屋
4
アジェンダ
![Page 5: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/5.jpg)
XPJUG / XP関西 寺子屋
5
アジェンダ
• 基礎確認• デザインパターン概要のご説明• ハンズオン「 ToDoリストを作ろう!」
– ペア決め– #1 イテレータパターン– #2 ファクトリメソッド– #3 メディエーターパターン
• ふりかえり
![Page 6: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/6.jpg)
XPJUG / XP関西 寺子屋
6
基礎確認
![Page 7: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/7.jpg)
XPJUG / XP関西 寺子屋
7
オブジェクト指向で知っておきたい事
1. オブジェクト指向って何?2. クラス図の描き方3. クラス図からプログラムへ置換
![Page 8: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/8.jpg)
XPJUG / XP関西 寺子屋
8
1.オブジェクト指向って何?
• 下記3つの異なる考え方の同音異句– メッセージパッシング– カプセル化– 多態性
• 上記3つを理解できていれば最低合格ライン。
![Page 9: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/9.jpg)
XPJUG / XP関西 寺子屋
9
2.クラス図の描き方
• 下記3種類が描ければ最低限 OK。– 継承( is a)– 集約 (has a)– 関連 (link)
親クラス
子クラス
クラス A
クラス B
クラス A
クラス B
継承 (is a) 集約 (has a) 関連 (link)
![Page 10: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/10.jpg)
XPJUG / XP関西 寺子屋
10
3.クラス図からプログラムへ置換
• 継承 (is a)–継承の関係
//---------------------------------------class 親クラス{
… … };
//---------------------------------------class 子クラス : public 親クラス{
… … };
親クラス
子クラス
![Page 11: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/11.jpg)
XPJUG / XP関西 寺子屋
11
3.クラス図からプログラムへ置換
• 集約 (has a)– 集約クラスの責任を持つ
– クラス Aと同時にクラス Bを生成する
//---------------------------------------class クラス B{
… … };
//---------------------------------------class クラス A{
… … B BObj;
… … };
クラス A
クラス B
![Page 12: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/12.jpg)
XPJUG / XP関西 寺子屋
12
3.クラス図からプログラムへ置換
• 集約 (has a その2 )C++のみ– 集約クラスの責任を持つ– クラス A生成後、クラス Bを生成する場合
– クラス Bを deleteする責務を負う。( C++のみ)
//---------------------------------------class クラス B{
… … };
//---------------------------------------class クラス A{public : A( ){ P_BObj = new B; } virtual ~A(){ delete P_BObj; }
… … B* P_BObj;};
クラス A
クラス B
![Page 13: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/13.jpg)
XPJUG / XP関西 寺子屋
13
3.クラス図からプログラムへ置換
• 関連 (link)– 他のクラスへのアクセスを行う
– 他クラスの責任は曖昧– クラス A、クラスBは、第3者が生成する。
//---------------------------------------
class クラス B
{
… …
};
//---------------------------------------class クラス A{
… …
B* P_BObj;… …
};
クラス A
クラス B
![Page 14: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/14.jpg)
XPJUG / XP関西 寺子屋
14
デザインパターン概要のご説明
![Page 15: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/15.jpg)
XPJUG / XP関西 寺子屋
15
「デザインパターン」って何?• 「パターン」とは繰り返し使用されるものである。
• 経験を通じて発見された問題解決策である。
• 「デザインパターン」とは、ソフトウェアの設計で適用されるパターンを指す。
• デザインパターンの内、最も有名なのは、 GoF( Gang of Four)が紹介した 23個のパターンである。
• 一般的に、上記 23個のパターンを「デザインパターン」と呼ぶ。
![Page 16: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/16.jpg)
XPJUG / XP関西 寺子屋
16
GoF(Gang of four)• 下記4人のグループ名。– エリック・ガンマ– リチャード・ヘルム– ラルフ・ジョンソン– ジョン・ブリシディース
http://takeji-soft.seesaa.net/article/34433484.html
![Page 17: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/17.jpg)
XPJUG / XP関西 寺子屋
17
GoFが発表した 23個のパターン
目的生成 構造 振る舞い
範囲
クラス ファクトリメソッド アダプター(※) インタープリタテンプレートメソッド
オブジェクト
アブストラクトファクトリービルダープロトタイプシングルトン
アダプター(※)ブリッジコンポジットデコレータファサードフライウェイプロキシー
チェインオブレスオンシビリティコマンドイテレータメディエータメメントオブザーバーステートストラテジービジター
本日ご紹介するパターン : ファクトリメソッド、イテレータ、メディエータ
![Page 18: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/18.jpg)
XPJUG / XP関西 寺子屋
18
ハンズオン「ToD oリストを作ろう!」
![Page 19: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/19.jpg)
XPJUG / XP関西 寺子屋
19
ペア決め
![Page 20: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/20.jpg)
XPJUG / XP関西 寺子屋
20
ペアで最初にやること1.「お名前カード」を作って下さい。
– 自分の氏名を書いて下さい。ハンドル名OK。– 最近あった「良かった事」を書いて下さい。– 1分以内に書いて下さい。
2.カードの内容をペアに教えてあげて下さい。– 発表したら、拍手をお願いします。– 1人1分でお願いします。
3.ペア名を決めて下さい。– 「 GoF」に負けないスゴい名前を期待しています!– 1分でお願いします。
![Page 21: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/21.jpg)
XPJUG / XP関西 寺子屋
21
準備
• プログラムを実行可能状態にして下さい。
![Page 22: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/22.jpg)
XPJUG / XP関西 寺子屋
22
仕様
• ToDoリスト仕様– 実行すると、ToDoが入力できます。– ToDoは英字で入力します。– 「 end」と入力すると、プログラムを終了します。
Application
Initial( )Run( )End( )
StringList
Add( )Get( )Length( )
![Page 23: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/23.jpg)
XPJUG / XP関西 寺子屋
23
#1 イテレータパターン
• 「 end」を入力した時、入力したToDoを一覧表示するプログラムを作成して下さい。
![Page 24: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/24.jpg)
XPJUG / XP関西 寺子屋
24
#1 イテレータパターン
• イテレーションパターンを使った回答例
Application
Initial( )Run( )End( )
StringList
Add( )Get( )Length( )
StringListIterator
hasNext( )next( )
このクラスにリストの参照インデックスを持たせる事で、クライアント側は参照インデックスという制限から開放される。
![Page 25: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/25.jpg)
XPJUG / XP関西 寺子屋
25
#1 イテレータパターン
<<interface>>Aggregate
+Iterator( )
ConcreteAggregate
+Iterator( ) : Iterator( )
<<interface>>Iterator
+hasNext( )+next( )
ConcretetIterator
- aggregate
+hasNext( ) : bool+next( ) : Object
<<Create>>
![Page 26: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/26.jpg)
XPJUG / XP関西 寺子屋
26
#1 イテレータパターン
• イテレーションパターンのメリット–オブジェクトの取得方法が統一化できる–参照方法を変更しても、クライアントの変更が不要
![Page 27: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/27.jpg)
XPJUG / XP関西 寺子屋
27
#2 ファクトリメソッド
• クライアントがイテレーターにリストをわざわざ登録するので、クライアントがイテレーターとリストの依存関係を知っておく必要がある。
• クライアントが依存関係を意識しなくても良い構造に変更せよ。
![Page 28: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/28.jpg)
XPJUG / XP関西 寺子屋
28
#2 ファクトリメソッド
• ビルダーパターンを使った回答例
Application
Initial( )Run( )End( )
StringList
Add( )Get( )Length( )GetIterator( )
StringListIterator
hasNext( )next( )
リストにイテレータ生成メソッドを付ける。イテレータにリストのポインタを渡す事で、依存をリストに閉じ込める。
![Page 29: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/29.jpg)
XPJUG / XP関西 寺子屋
29
#2 ファクトリメソッドApplication StringList StringListIterator
GetIterator( )new StringListIterator ( this )
return( StringListIteratorのポインタ )
return( StringListIteratorのポインタ )
![Page 30: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/30.jpg)
XPJUG / XP関西 寺子屋
30
#2 ファクトリメソッド
Client DataObjectFactory DataObject
DBDataObjectFileDataObject<<Create>>
<<Create>>
![Page 31: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/31.jpg)
XPJUG / XP関西 寺子屋
31
#2 ファクトリメソッド
• ファクトリメソッドのメリット– 関数の呼び出しでオブジェクトを取得できる– クライアント側は、取得したオブジェクトの振る舞いを意識する必要が無い
![Page 32: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/32.jpg)
XPJUG / XP関西 寺子屋
32
# 3 メディエータパターン
• 複数の関数からリストにアクセスする場合を考える。
• リストを参照する場合、イテレーターを使用するものとする。
• あるリストから「リセット」を実行すると、他の全てのリストの参照位置をリストの先頭にセットする構造に変更せよ。
![Page 33: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/33.jpg)
XPJUG / XP関西 寺子屋
33
# 3 メディエータパターン
• メディエータパターンを使った回答例
Application
Initial( )Run( )End( )
StringList
Add( )Get( )Length( )GetIterator( )AllReset( )
StringListIterator
hasNext( )next( )AllReset( )Reset( )
StringListIteratorList
Add( )Get( )GetLength( )
<<Create>>
![Page 34: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/34.jpg)
XPJUG / XP関西 寺子屋
34
# 3 メディエータパターンApplication StringListIterator#1 StringListStringListIterator#2
ResetAll( )ResetAll( )
Reset ( )
Reset ( )
![Page 35: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/35.jpg)
XPJUG / XP関西 寺子屋
35
# 3 メディエータパターン
<<interface>>Mediator
ConcreteColleagueA
<<interface>>Colleague
+buildPart( )
ConcreteColleagueBConcreteMediator
![Page 36: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/36.jpg)
XPJUG / XP関西 寺子屋
36
# 3 メディエータパターン
• メディエータパターンのメリット– Collegueオブジェクトの結合度を下げることができる– オブジェクト間の協調が理解しやすい
![Page 37: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/37.jpg)
XPJUG / XP関西 寺子屋
37
ふりかえり
![Page 38: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/38.jpg)
XPJUG / XP関西 寺子屋
38
最後までお付き合い頂き、ありがとうございます。
![Page 39: XP寺子屋 デザインパターン入門](https://reader034.vdocuments.pub/reader034/viewer/2022052602/559c462a1a28ab94218b46a6/html5/thumbnails/39.jpg)
XPJUG / XP関西 寺子屋
39
参考文献
• 独習デザインパターン C++