$30 off During Our Annual Pro Sale. View Details »

デザインパターンを出自から深く理解する / understanding design pattern from the origin

デザインパターンを出自から深く理解する / understanding design pattern from the origin

PHPカンファレンス沖縄 2019 前夜祭 で発表したデザインパターンの出自から特性を理解しようという内容です

Kazuki Higashiguchi
PRO

October 11, 2019
Tweet

More Decks by Kazuki Higashiguchi

Other Decks in Technology

Transcript

  1. © - BASE, Inc. デザインパターンを 出⾃から深く理解する PHPカンファレンス沖縄 2019 前夜祭 .

    . - @hgsgtk
  2. © - BASE, Inc. 持ち帰っていただくこと • 「デザインパターン」を普段の視点ではあまり考え ない、その出⾃を視点に⾒る • 影響の⼤きい「パタン‧ランゲージ」を抑えた上

    で、「デザインパターン」を⾒てみる
  3. © - BASE, Inc. var_dump($hgsgtk); : @hgsgtk Kazuki Higashiguchi BASE

    BANK, Inc. / Dev Division / Tech Lead Software Developer
  4. © - BASE, Inc. デザインパターン パタン‧ランゲージ パタン‧ランゲージとデザインパターン ⽬次

  5. © - BASE, Inc. デザインパターン パタン‧ランゲージ パタン‧ランゲージとデザインパターン ⽬次

  6. © - BASE, Inc. デザインパターンとは • オブジェクト指向ソフトウェアを設計する際の経験 を記録、カタログ化したもの • ソフトウェア設計において繰り返し現れる構造をパ

    ターンとしてまとめる • “種々の状況における設計上の⼀般的な問題の解法 に適⽤できるよう、オブジェクトやクラス間の通信 を記述したもの”
  7. © - BASE, Inc. 1994年 GoF (Gang of Four) 1992年

    OOPSLAで、Erich Gamma、Richard Helm、Ralph E. Johnson、John Matthew Vlissides の4⼈組が顔合わせ 1994年10⽉、書籍『オブジェクト指向における再利 ⽤のためのデザインパターン』を発表
  8. © - BASE, Inc. 1994年『オブジェクト指向における再利⽤のためのデザインパターン』 https://www.amazon.co.jp/dp/

  9. © - BASE, Inc. デザインパターン間の関連 https://www.simonvandyk.co.za/writes/ / / /software-design-patterns-in-c-uml

  10. © - BASE, Inc. Abstract Factory Factory Method Singleton Builder

    Prototype ⽣成に関するパターン
  11. © - BASE, Inc. Adapter Composite Facade Bridge Decorator Flyweight

    Proxy 構造に関するパターン
  12. © - BASE, Inc. Chain of Responsibility Interpreter Mediator Command

    Iterator Memento 振る舞いに関するパターン
  13. © - BASE, Inc. デザインパターンのテンプレート(GoF Form)⼤枠 • パターン名: 設計における⽤語の語彙を増やすため •

    問題: 問題と⽂脈 • 解法: 設計の要素、解法および責任、協調関係 • 結果: 適⽤した結果やトレードオフ
  14. © - BASE, Inc. パターン名と分類 別名 適⽤可能性 ⽬的 動機 構造

    協調関係 実装 構成要素 結果 デザインパターンのテンプレート(GoF Form)詳細
  15. © - BASE, Inc. サンプルコード 関連するパターン 使⽤例 デザインパターンのテンプレート(GoF Form)

  16. © - BASE, Inc. 例: Composite pattern https://www.codeproject.com/Articles/ /Illustrated-GOF-Design-Patterns-in-C-Part-II-Struc

  17. © - BASE, Inc. パタン‧ランゲージの影響 “我々の成果は、Alexanderのものといろいろな意味 で似ている。どちらも、既存のシステムを観察してそ の中にあるパターンを⾒つけることを基礎に置いてい る。” ErichGamma、RichardHelm、RalphJohnson、JohnVlissides著∕本位⽥真⼀、吉⽥和樹監訳『オブジェクト指向における再利

    ⽤のためのデザインパターン改訂版』ソフトバンククリエイティブ、1999、p.
  18. © - BASE, Inc. 参考: アレグザンダーの建築理論とソフトウェア設計の関係性 https://speakerdeck.com/hgsgtk/where-did-the-swing-metaphor-come-from

  19. © - BASE, Inc. デザインパターンまとめ • Gang of Four •

    パターンに名前がつけられ、同じテンプレートで表 現される • 「パタン‧ランゲージ」のアイデアに影響を受け “似て”いる
  20. © - BASE, Inc. デザインパターン パタン‧ランゲージ パタン‧ランゲージとデザインパターン ⽬次

  21. © - BASE, Inc. 1977年『パタン‧ランゲージ―環境設計の⼿引』 https://www.amazon.co.jp/dp/

  22. 1936年ウィーン出⾝の都市 計画家‧建築家 建築‧都市計画の理論とし て、「パタン‧ランゲージ」 を提唱 © - BASE, Inc. クリストファー‧アレグザンダー

    https://en.wikipedia.org/wiki/Christopher_Alexander
  23. © - BASE, Inc. 建築において繰り返し現れる構造を再利⽤しやすい形 式にまとめたもの 利⽤者と設計者の共通⾔語(ランゲージ)として使う ことで、利⽤者が⾃分⾃⾝で建築の設計を⾏い、本当 に望んだ建築を実現できるようになることを⽬指した パタン‧ランゲージ

  24. © - BASE, Inc. 『パタン‧ランゲージ』の3つの部 「町」:都市の⼤きな配置を考えるための⼤きなパ ターン 「建築」:敷地の空間にどのように建物を配置すべき かというパターン 「施⾏」:建物の構造‧材料、柱‧壁、床‧天井など

    の⼀つ⼀つの構造を決めるためのパターン
  25. © - BASE, Inc. 『パタン‧ランゲージ』パタン例 町: ⾃⽴地域‧町の分布‧フィンガー上の都市と⽥園 ..etc 建築: 複号建物‧⾒えない駐⾞場‧窓のある場所

    ..etc 施⼯: ⽣活空間にしたがう構造‧深い窓枠 ..etc
  26. © - BASE, Inc. パタンの相互関係 • パタンには序列がある • 町→建築→施⼯は直列的なつながりで機能する •

    各パタンは、ランゲージの上位にある特定のパタ ン、下位にある特定のパタンと結びつく C‧アレグザンダー著∕平⽥ 翰那訳『パタン‧ランゲージ―環境設計の⼿引』あるパタン‧ランゲージ
  27. © - BASE, Inc. パタン名 上位パタンへのつながり 下位パタンへのつながり 写真 本⽂ パタン‧ランゲージのテンプレート

  28. 例: パタン 180 WIDOW PLACE パタン名: 「窓のある場所」 上位パタンへのつながり: 「⽞関 室」‧「禅窓」‧「どの

    部屋も2⾯採光」 ..etc 下位パタンへのつながり: 「アルコー ブ」‧「低い窓台」 ..etc © - BASE, Inc. C‧アレグザンダー著∕平⽥ 翰那訳『パタン‧ランゲージ―環境設計の⼿引』あるパタン‧ランゲージ https://www.pinterest.jp/pin/
  29. © - BASE, Inc. パタン‧ランゲージまとめ • 繰り返し現れる構造を再利⽤しやすい形式にまとめ た • パタンのテンプレート(形式)を定義している

    • 町‧建築‧施⼯の⼤きく3つの分類 • パタンごとに相互関係を持ち、パタンを関係の順に 適⽤していくことで建築物を⽣成する
  30. © - BASE, Inc. デザインパターン パタン‧ランゲージ パタン‧ランゲージとデザインパターン ⽬次

  31. © - BASE, Inc. パタン‧ランゲージとデザインパターンの相違点 .建築物には数千年の歴史があり、利⽤できる古典も多い。ソフトウェアシステ ムの場合は歴史がずっと短く、古典と呼べるものはほとんどない。 .Alexanderはパターンを利⽤する優先順位を付けたが、我々は順位を付けてい ない。 .Alexanderのパターンは扱う問題を強調しているが、我々のデザインパターン

    は解決⽅法についてより詳細に記述している。 .Alexanderは提案したパターンによって完全な建築物が⽣成できると主張して いるが、我々は提案したパターンによって完全なプログラムが⽣成できるとは 主張していない。 ErichGamma、RichardHelm、RalphJohnson、JohnVlissides著∕本位⽥真⼀、吉⽥和樹監訳『オブジェクト指向における再利 ⽤のためのデザインパターン改訂版』ソフトバンククリエイティブ、1999、p.
  32. © - BASE, Inc. 相違点はどこから “建築とソフトウェアの根本的な性質の違いからくると⾔える でしょう。⼈が暮らす町、建物、部屋は、⼈が⼈の姿と機能 を持っている限り、たとえば⾝⻑や体重が⼀定の範囲に収ま るといった暗黙の条件を備えています。しかしソフトウェア は、物としての実体を持っていないがゆえに、その前提条件を

    暗黙の内に規定することはできません。” 江渡 浩⼀郎. パターン、Wiki、XP 時を超えた創造の原則 (WEB+DB PRESS plus) 9章 デザインパターン
  33. © - BASE, Inc. デザインパターンだけでソフトウェア設計ができるわけではない “本書に⽰したパターンはパターン⾔語を構成しては いない。構築されたソフトウェアシステムの多様性を 考えると、ステップバイステップにアプリケーション 設計指針を与えるような 完璧な

    パターン集合を提供 することは困難である” ErichGamma、RichardHelm、RalphJohnson、JohnVlissides著∕本位⽥真⼀、吉⽥和樹監訳『オブジェクト指向における再利 ⽤のためのデザインパターン改訂版』ソフトバンククリエイティブ、1999、p.
  34. © - BASE, Inc. “デザインパターンは、ソフトウェア のための広範なパターン⾔語の⼀部に 過ぎない” ErichGamma、RichardHelm、RalphJohnson、JohnVlissides著∕本位⽥真⼀、吉⽥和樹監訳『オブジェクト指向における再利 ⽤のためのデザインパターン改訂版』ソフトバンククリエイティブ、1999、p.

  35. © - BASE, Inc. パタン‧ランゲージとの対応 「町」 ≈ アーキテクチャ ex. Layers,

    MVC etc 「建築」 ≈ GoFのデザインパターン 「施⾏」 ≈ 各⾔語での実装パターン ex. Smalltalkベストプラクティスパターン 書籍 江渡 浩⼀郎. パターン、Wiki、XP 時を超えた創造の原則
  36. © - BASE, Inc. “つまり⾔語には2つの機能がある。⼈間の過去の体験 を蓄積する機能。もう1つは、その蓄積された体験 (単語)を再利⽤(⽂法)して、無数の新しい概念 (⽂章)を作り出すという機能である。” C‧アレグザンダー著∕平⽥ 翰那訳『パタン‧ランゲージ―環境設計の⼿引』訳者あとがき

  37. © - BASE, Inc. このトークでやったこと • デザインパターンと、その出⾃ともいえるパタン‧ ランゲージを抑えた • デザインパターンという概念の輪郭を、類似するも

    のと⽐較して捉え直した • デザインパターンという “⾔語” を基本に次の概念 が⽣まれているとも⾔える
  38. © - BASE, Inc. まとめ(パターン作成者視点) • 名前をつけて⾔語とすることによる、経験の蓄積と 次の概念への発展の期待 • パターンを同じテンプレートで記述することによる

    わかりやすさ
  39. © - BASE, Inc. まとめ(パターン利⽤者視点) • デザインパターンは完全なソフトウェアを作るもの ではないことは、発案者⾃⾝が⾔っていることに留 意 •

    全てを解決できるわけではないが、これをひとつの “⾔語” として現状使えている。設計の “⾔語” とし て活⽤できる便利さがパターンにはある
  40. © - BASE, Inc. <?php . . - @hgsgtk