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

More Related Content

Viewers also liked

GoF のデザインパターンじゃないけど、よくあるパターン
GoF のデザインパターンじゃないけど、よくあるパターンGoF のデザインパターンじゃないけど、よくあるパターン
GoF のデザインパターンじゃないけど、よくあるパターンGaprot
 
デザインパターン
デザインパターンデザインパターン
デザインパターンgaaupp
 
XP寺子屋第9回「シンプル・プログラミング」
XP寺子屋第9回「シンプル・プログラミング」XP寺子屋第9回「シンプル・プログラミング」
XP寺子屋第9回「シンプル・プログラミング」takepu
 
Xp入門 ~これで分かる!究極のxp入門~
Xp入門 ~これで分かる!究極のxp入門~Xp入門 ~これで分かる!究極のxp入門~
Xp入門 ~これで分かる!究極のxp入門~takepu
 
行列のできるXp相談所 20110917
行列のできるXp相談所 20110917行列のできるXp相談所 20110917
行列のできるXp相談所 20110917takepu
 
Xp寺子屋出張版#2「xp体験」
Xp寺子屋出張版#2「xp体験」Xp寺子屋出張版#2「xp体験」
Xp寺子屋出張版#2「xp体験」takepu
 
Crystalを触り始めてから起こったこと
Crystalを触り始めてから起こったことCrystalを触り始めてから起こったこと
Crystalを触り始めてから起こったことat grandpa
 
事例発表 小山
事例発表 小山事例発表 小山
事例発表 小山takepu
 
Xp寺子屋出張版#2「xp入門 追補版」
Xp寺子屋出張版#2「xp入門 追補版」Xp寺子屋出張版#2「xp入門 追補版」
Xp寺子屋出張版#2「xp入門 追補版」takepu
 
Fly weight pattern #dezapatan
Fly weight pattern #dezapatanFly weight pattern #dezapatan
Fly weight pattern #dezapatankuidaoring
 
Xp祭り関西2011 中村lLT
Xp祭り関西2011 中村lLTXp祭り関西2011 中村lLT
Xp祭り関西2011 中村lLTtakepu
 
男女共同ペアプログラミング勉強会関西の紹介
男女共同ペアプログラミング勉強会関西の紹介男女共同ペアプログラミング勉強会関西の紹介
男女共同ペアプログラミング勉強会関西の紹介takepu
 
覚えて帰ろうJavaデザインパターン
覚えて帰ろうJavaデザインパターン覚えて帰ろうJavaデザインパターン
覚えて帰ろうJavaデザインパターンKazuya Hirota
 
凡人の凡人による凡人のためのデザインパターン第一幕 Public
凡人の凡人による凡人のためのデザインパターン第一幕 Public凡人の凡人による凡人のためのデザインパターン第一幕 Public
凡人の凡人による凡人のためのデザインパターン第一幕 Publicbonjin6770 Kurosawa
 
Strategy パターンと開放/閉鎖原則に見るデザインパターンの有用性
Strategy パターンと開放/閉鎖原則に見るデザインパターンの有用性Strategy パターンと開放/閉鎖原則に見るデザインパターンの有用性
Strategy パターンと開放/閉鎖原則に見るデザインパターンの有用性tomo_masakura
 
Reactor Design Pattern
Reactor Design PatternReactor Design Pattern
Reactor Design Patternliminescence
 
DevLOVE関西2012 B-2「メンバーの行動が激変!「ペアふりかえり」ワークショップ
DevLOVE関西2012 B-2「メンバーの行動が激変!「ペアふりかえり」ワークショップ DevLOVE関西2012 B-2「メンバーの行動が激変!「ペアふりかえり」ワークショップ
DevLOVE関西2012 B-2「メンバーの行動が激変!「ペアふりかえり」ワークショップ takepu
 
上級救命技能認定
上級救命技能認定上級救命技能認定
上級救命技能認定Tetsuya Yoshida
 
デザインパターン勉強会
デザインパターン勉強会デザインパターン勉強会
デザインパターン勉強会Tetsuya Yoshida
 
الاسرار الخفيه للوندوز Xp
الاسرار الخفيه للوندوز Xp الاسرار الخفيه للوندوز Xp
الاسرار الخفيه للوندوز Xp maldawly
 

Viewers also liked (20)

GoF のデザインパターンじゃないけど、よくあるパターン
GoF のデザインパターンじゃないけど、よくあるパターンGoF のデザインパターンじゃないけど、よくあるパターン
GoF のデザインパターンじゃないけど、よくあるパターン
 
デザインパターン
デザインパターンデザインパターン
デザインパターン
 
XP寺子屋第9回「シンプル・プログラミング」
XP寺子屋第9回「シンプル・プログラミング」XP寺子屋第9回「シンプル・プログラミング」
XP寺子屋第9回「シンプル・プログラミング」
 
Xp入門 ~これで分かる!究極のxp入門~
Xp入門 ~これで分かる!究極のxp入門~Xp入門 ~これで分かる!究極のxp入門~
Xp入門 ~これで分かる!究極のxp入門~
 
行列のできるXp相談所 20110917
行列のできるXp相談所 20110917行列のできるXp相談所 20110917
行列のできるXp相談所 20110917
 
Xp寺子屋出張版#2「xp体験」
Xp寺子屋出張版#2「xp体験」Xp寺子屋出張版#2「xp体験」
Xp寺子屋出張版#2「xp体験」
 
Crystalを触り始めてから起こったこと
Crystalを触り始めてから起こったことCrystalを触り始めてから起こったこと
Crystalを触り始めてから起こったこと
 
事例発表 小山
事例発表 小山事例発表 小山
事例発表 小山
 
Xp寺子屋出張版#2「xp入門 追補版」
Xp寺子屋出張版#2「xp入門 追補版」Xp寺子屋出張版#2「xp入門 追補版」
Xp寺子屋出張版#2「xp入門 追補版」
 
Fly weight pattern #dezapatan
Fly weight pattern #dezapatanFly weight pattern #dezapatan
Fly weight pattern #dezapatan
 
Xp祭り関西2011 中村lLT
Xp祭り関西2011 中村lLTXp祭り関西2011 中村lLT
Xp祭り関西2011 中村lLT
 
男女共同ペアプログラミング勉強会関西の紹介
男女共同ペアプログラミング勉強会関西の紹介男女共同ペアプログラミング勉強会関西の紹介
男女共同ペアプログラミング勉強会関西の紹介
 
覚えて帰ろうJavaデザインパターン
覚えて帰ろうJavaデザインパターン覚えて帰ろうJavaデザインパターン
覚えて帰ろうJavaデザインパターン
 
凡人の凡人による凡人のためのデザインパターン第一幕 Public
凡人の凡人による凡人のためのデザインパターン第一幕 Public凡人の凡人による凡人のためのデザインパターン第一幕 Public
凡人の凡人による凡人のためのデザインパターン第一幕 Public
 
Strategy パターンと開放/閉鎖原則に見るデザインパターンの有用性
Strategy パターンと開放/閉鎖原則に見るデザインパターンの有用性Strategy パターンと開放/閉鎖原則に見るデザインパターンの有用性
Strategy パターンと開放/閉鎖原則に見るデザインパターンの有用性
 
Reactor Design Pattern
Reactor Design PatternReactor Design Pattern
Reactor Design Pattern
 
DevLOVE関西2012 B-2「メンバーの行動が激変!「ペアふりかえり」ワークショップ
DevLOVE関西2012 B-2「メンバーの行動が激変!「ペアふりかえり」ワークショップ DevLOVE関西2012 B-2「メンバーの行動が激変!「ペアふりかえり」ワークショップ
DevLOVE関西2012 B-2「メンバーの行動が激変!「ペアふりかえり」ワークショップ
 
上級救命技能認定
上級救命技能認定上級救命技能認定
上級救命技能認定
 
デザインパターン勉強会
デザインパターン勉強会デザインパターン勉強会
デザインパターン勉強会
 
الاسرار الخفيه للوندوز Xp
الاسرار الخفيه للوندوز Xp الاسرار الخفيه للوندوز Xp
الاسرار الخفيه للوندوز Xp
 

Similar to XP寺子屋 デザインパターン入門

Agile Communities In Japan(J)
Agile Communities In Japan(J)Agile Communities In Japan(J)
Agile Communities In Japan(J)Yasui Tsutomu
 
Xp祭りに行ってきた
Xp祭りに行ってきたXp祭りに行ってきた
Xp祭りに行ってきたAkira Suenami
 
20190524_WindowsユーザのためのSalesforce DX
20190524_WindowsユーザのためのSalesforce DX20190524_WindowsユーザのためのSalesforce DX
20190524_WindowsユーザのためのSalesforce DXTakahito Miyamoto
 
名古屋アジャイル勉強会「XPから学ぶアジャイル」
名古屋アジャイル勉強会「XPから学ぶアジャイル」名古屋アジャイル勉強会「XPから学ぶアジャイル」
名古屋アジャイル勉強会「XPから学ぶアジャイル」hiroyuki Yamamoto
 
Kaggleのテクニック
KaggleのテクニックKaggleのテクニック
KaggleのテクニックYasunori Ozaki
 
ソフト屋が挑戦した電子工作 〜力ずくの10か月〜
ソフト屋が挑戦した電子工作 〜力ずくの10か月〜ソフト屋が挑戦した電子工作 〜力ずくの10か月〜
ソフト屋が挑戦した電子工作 〜力ずくの10か月〜Shinichi Hirauchi
 
Road to success System.IO.Compression.ZipArchive Feedback
Road to success System.IO.Compression.ZipArchive FeedbackRoad to success System.IO.Compression.ZipArchive Feedback
Road to success System.IO.Compression.ZipArchive FeedbackKazushi Kamegawa
 
PlayFabとCognitiveを 連携させて健全なゲーム運営を
PlayFabとCognitiveを連携させて健全なゲーム運営をPlayFabとCognitiveを連携させて健全なゲーム運営を
PlayFabとCognitiveを 連携させて健全なゲーム運営をShinya Nakajima
 
Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01Ken SASAKI
 
運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]
運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]
運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]DeNA
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?Takuya Ueda
 
「機械学習とは?」から始める Deep learning実践入門
「機械学習とは?」から始める Deep learning実践入門「機械学習とは?」から始める Deep learning実践入門
「機械学習とは?」から始める Deep learning実践入門Hideto Masuoka
 
アート・オブ・アジャイル デベロップメント ~組織を成功に導くエクストリームプログラミングの道~
アート・オブ・アジャイル デベロップメント ~組織を成功に導くエクストリームプログラミングの道~アート・オブ・アジャイル デベロップメント ~組織を成功に導くエクストリームプログラミングの道~
アート・オブ・アジャイル デベロップメント ~組織を成功に導くエクストリームプログラミングの道~Fumihiko Kinoshita
 
20190809 ルーキー会 × TERAKOYAFORCE
20190809 ルーキー会 × TERAKOYAFORCE20190809 ルーキー会 × TERAKOYAFORCE
20190809 ルーキー会 × TERAKOYAFORCESFDG ROOKIES
 
「仙台ミラソン」行って来た
「仙台ミラソン」行って来た「仙台ミラソン」行って来た
「仙台ミラソン」行って来たHirokazu Tokuno
 

Similar to XP寺子屋 デザインパターン入門 (20)

Agile Communities In Japan(J)
Agile Communities In Japan(J)Agile Communities In Japan(J)
Agile Communities In Japan(J)
 
XP movement In Japan
XP movement In JapanXP movement In Japan
XP movement In Japan
 
Xp祭りに行ってきた
Xp祭りに行ってきたXp祭りに行ってきた
Xp祭りに行ってきた
 
20190524_WindowsユーザのためのSalesforce DX
20190524_WindowsユーザのためのSalesforce DX20190524_WindowsユーザのためのSalesforce DX
20190524_WindowsユーザのためのSalesforce DX
 
Tokyo r30 beginner
Tokyo r30 beginnerTokyo r30 beginner
Tokyo r30 beginner
 
名古屋アジャイル勉強会「XPから学ぶアジャイル」
名古屋アジャイル勉強会「XPから学ぶアジャイル」名古屋アジャイル勉強会「XPから学ぶアジャイル」
名古屋アジャイル勉強会「XPから学ぶアジャイル」
 
Kaggleのテクニック
KaggleのテクニックKaggleのテクニック
Kaggleのテクニック
 
ソフト屋が挑戦した電子工作 〜力ずくの10か月〜
ソフト屋が挑戦した電子工作 〜力ずくの10か月〜ソフト屋が挑戦した電子工作 〜力ずくの10か月〜
ソフト屋が挑戦した電子工作 〜力ずくの10か月〜
 
Road to success System.IO.Compression.ZipArchive Feedback
Road to success System.IO.Compression.ZipArchive FeedbackRoad to success System.IO.Compression.ZipArchive Feedback
Road to success System.IO.Compression.ZipArchive Feedback
 
Tokyo r38
Tokyo r38Tokyo r38
Tokyo r38
 
PlayFabとCognitiveを 連携させて健全なゲーム運営を
PlayFabとCognitiveを連携させて健全なゲーム運営をPlayFabとCognitiveを連携させて健全なゲーム運営を
PlayFabとCognitiveを 連携させて健全なゲーム運営を
 
Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01
 
運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]
運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]
運用中のゲームにAIを導入するには〜プロジェクト推進・ユースケース・運用〜 [DeNA TechCon 2019]
 
Scrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pubScrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pub
 
メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?メルカリ・ソウゾウでは どうGoを活用しているのか?
メルカリ・ソウゾウでは どうGoを活用しているのか?
 
Xp2
Xp2Xp2
Xp2
 
「機械学習とは?」から始める Deep learning実践入門
「機械学習とは?」から始める Deep learning実践入門「機械学習とは?」から始める Deep learning実践入門
「機械学習とは?」から始める Deep learning実践入門
 
アート・オブ・アジャイル デベロップメント ~組織を成功に導くエクストリームプログラミングの道~
アート・オブ・アジャイル デベロップメント ~組織を成功に導くエクストリームプログラミングの道~アート・オブ・アジャイル デベロップメント ~組織を成功に導くエクストリームプログラミングの道~
アート・オブ・アジャイル デベロップメント ~組織を成功に導くエクストリームプログラミングの道~
 
20190809 ルーキー会 × TERAKOYAFORCE
20190809 ルーキー会 × TERAKOYAFORCE20190809 ルーキー会 × TERAKOYAFORCE
20190809 ルーキー会 × TERAKOYAFORCE
 
「仙台ミラソン」行って来た
「仙台ミラソン」行って来た「仙台ミラソン」行って来た
「仙台ミラソン」行って来た
 

More from takepu

お客様へ価値を届け続けるために~継続的デリバリーの活用~
お客様へ価値を届け続けるために~継続的デリバリーの活用~お客様へ価値を届け続けるために~継続的デリバリーの活用~
お客様へ価値を届け続けるために~継続的デリバリーの活用~takepu
 
もえる!えっくす・ぴぃ入門第1回「えっくす・ぴぃの歴史」
もえる!えっくす・ぴぃ入門第1回「えっくす・ぴぃの歴史」もえる!えっくす・ぴぃ入門第1回「えっくす・ぴぃの歴史」
もえる!えっくす・ぴぃ入門第1回「えっくす・ぴぃの歴史」takepu
 
ペアプロのオイシイ料理法、おしえます。
ペアプロのオイシイ料理法、おしえます。ペアプロのオイシイ料理法、おしえます。
ペアプロのオイシイ料理法、おしえます。takepu
 
20121117 aut open_jam
20121117 aut open_jam20121117 aut open_jam
20121117 aut open_jamtakepu
 
オブジェクト指向モデリング
オブジェクト指向モデリングオブジェクト指向モデリング
オブジェクト指向モデリングtakepu
 
PFP関西ワークショップ#26
PFP関西ワークショップ#26PFP関西ワークショップ#26
PFP関西ワークショップ#26takepu
 
ペアプロとは? 20120331
ペアプロとは? 20120331ペアプロとは? 20120331
ペアプロとは? 20120331takepu
 
Xp寺子屋出張版#2「ペアワークの楽しさ実感!ペアドローワークショップ」
Xp寺子屋出張版#2「ペアワークの楽しさ実感!ペアドローワークショップ」Xp寺子屋出張版#2「ペアワークの楽しさ実感!ペアドローワークショップ」
Xp寺子屋出張版#2「ペアワークの楽しさ実感!ペアドローワークショップ」takepu
 
Lt「5分で分かる!e xtremeprogramming」.ppt
Lt「5分で分かる!e xtremeprogramming」.pptLt「5分で分かる!e xtremeprogramming」.ppt
Lt「5分で分かる!e xtremeprogramming」.ppttakepu
 
劇的改善!ペアふりかえり」 Before→After
劇的改善!ペアふりかえり」 Before→After劇的改善!ペアふりかえり」 Before→After
劇的改善!ペアふりかえり」 Before→Aftertakepu
 
事例発表 本田
事例発表 本田事例発表 本田
事例発表 本田takepu
 
Et west2010 work-shop
Et west2010 work-shopEt west2010 work-shop
Et west2010 work-shoptakepu
 
Xp Terakoya 05
Xp Terakoya 05Xp Terakoya 05
Xp Terakoya 05takepu
 
Xpfp 070626
Xpfp 070626Xpfp 070626
Xpfp 070626takepu
 
Xp Terakoya No02
Xp Terakoya No02Xp Terakoya No02
Xp Terakoya No02takepu
 
Xp Terakoya No04
Xp Terakoya No04Xp Terakoya No04
Xp Terakoya No04takepu
 
PFP WS #20 B-1
PFP WS #20 B-1PFP WS #20 B-1
PFP WS #20 B-1takepu
 

More from takepu (17)

お客様へ価値を届け続けるために~継続的デリバリーの活用~
お客様へ価値を届け続けるために~継続的デリバリーの活用~お客様へ価値を届け続けるために~継続的デリバリーの活用~
お客様へ価値を届け続けるために~継続的デリバリーの活用~
 
もえる!えっくす・ぴぃ入門第1回「えっくす・ぴぃの歴史」
もえる!えっくす・ぴぃ入門第1回「えっくす・ぴぃの歴史」もえる!えっくす・ぴぃ入門第1回「えっくす・ぴぃの歴史」
もえる!えっくす・ぴぃ入門第1回「えっくす・ぴぃの歴史」
 
ペアプロのオイシイ料理法、おしえます。
ペアプロのオイシイ料理法、おしえます。ペアプロのオイシイ料理法、おしえます。
ペアプロのオイシイ料理法、おしえます。
 
20121117 aut open_jam
20121117 aut open_jam20121117 aut open_jam
20121117 aut open_jam
 
オブジェクト指向モデリング
オブジェクト指向モデリングオブジェクト指向モデリング
オブジェクト指向モデリング
 
PFP関西ワークショップ#26
PFP関西ワークショップ#26PFP関西ワークショップ#26
PFP関西ワークショップ#26
 
ペアプロとは? 20120331
ペアプロとは? 20120331ペアプロとは? 20120331
ペアプロとは? 20120331
 
Xp寺子屋出張版#2「ペアワークの楽しさ実感!ペアドローワークショップ」
Xp寺子屋出張版#2「ペアワークの楽しさ実感!ペアドローワークショップ」Xp寺子屋出張版#2「ペアワークの楽しさ実感!ペアドローワークショップ」
Xp寺子屋出張版#2「ペアワークの楽しさ実感!ペアドローワークショップ」
 
Lt「5分で分かる!e xtremeprogramming」.ppt
Lt「5分で分かる!e xtremeprogramming」.pptLt「5分で分かる!e xtremeprogramming」.ppt
Lt「5分で分かる!e xtremeprogramming」.ppt
 
劇的改善!ペアふりかえり」 Before→After
劇的改善!ペアふりかえり」 Before→After劇的改善!ペアふりかえり」 Before→After
劇的改善!ペアふりかえり」 Before→After
 
事例発表 本田
事例発表 本田事例発表 本田
事例発表 本田
 
Et west2010 work-shop
Et west2010 work-shopEt west2010 work-shop
Et west2010 work-shop
 
Xp Terakoya 05
Xp Terakoya 05Xp Terakoya 05
Xp Terakoya 05
 
Xpfp 070626
Xpfp 070626Xpfp 070626
Xpfp 070626
 
Xp Terakoya No02
Xp Terakoya No02Xp Terakoya No02
Xp Terakoya No02
 
Xp Terakoya No04
Xp Terakoya No04Xp Terakoya No04
Xp Terakoya No04
 
PFP WS #20 B-1
PFP WS #20 B-1PFP WS #20 B-1
PFP WS #20 B-1
 

XP寺子屋 デザインパターン入門

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