Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,245 views

Published on

  • Be the first to comment

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

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

×