Upgrade to Pro — share decks privately, control downloads, hide ads and more …

デザインパターンを出自から深く理解する / 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

    View Slide

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

    View Slide

  3. © - BASE, Inc.
    var_dump($hgsgtk);
    : @hgsgtk
    Kazuki Higashiguchi
    BASE BANK, Inc. / Dev Division / Tech Lead
    Software Developer

    View Slide

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

    View Slide

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

    View Slide

  6. © - BASE, Inc.
    デザインパターンとは
    • オブジェクト指向ソフトウェアを設計する際の経験
    を記録、カタログ化したもの
    • ソフトウェア設計において繰り返し現れる構造をパ
    ターンとしてまとめる
    • “種々の状況における設計上の⼀般的な問題の解法
    に適⽤できるよう、オブジェクトやクラス間の通信
    を記述したもの”

    View Slide

  7. © - BASE, Inc.
    1994年 GoF (Gang of Four)
    1992年 OOPSLAで、Erich Gamma、Richard
    Helm、Ralph E. Johnson、John Matthew
    Vlissides の4⼈組が顔合わせ
    1994年10⽉、書籍『オブジェクト指向における再利
    ⽤のためのデザインパターン』を発表

    View Slide

  8. © - BASE, Inc.
    1994年『オブジェクト指向における再利⽤のためのデザインパターン』
    https://www.amazon.co.jp/dp/

    View Slide

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

    View Slide

  10. © - BASE, Inc.
    Abstract Factory
    Factory Method
    Singleton
    Builder
    Prototype
    ⽣成に関するパターン

    View Slide

  11. © - BASE, Inc.
    Adapter
    Composite
    Facade
    Bridge
    Decorator
    Flyweight
    Proxy
    構造に関するパターン

    View Slide

  12. © - BASE, Inc.
    Chain of Responsibility
    Interpreter
    Mediator
    Command
    Iterator
    Memento
    振る舞いに関するパターン

    View Slide

  13. © - BASE, Inc.
    デザインパターンのテンプレート(GoF Form)⼤枠
    • パターン名: 設計における⽤語の語彙を増やすため
    • 問題: 問題と⽂脈
    • 解法: 設計の要素、解法および責任、協調関係
    • 結果: 適⽤した結果やトレードオフ

    View Slide

  14. © - BASE, Inc.
    パターン名と分類
    別名
    適⽤可能性
    ⽬的
    動機
    構造
    協調関係
    実装
    構成要素
    結果
    デザインパターンのテンプレート(GoF Form)詳細

    View Slide

  15. © - BASE, Inc.
    サンプルコード
    関連するパターン
    使⽤例
    デザインパターンのテンプレート(GoF Form)

    View Slide

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

    View Slide

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

    View Slide

  18. © - BASE, Inc.
    参考: アレグザンダーの建築理論とソフトウェア設計の関係性
    https://speakerdeck.com/hgsgtk/where-did-the-swing-metaphor-come-from

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  25. © - BASE, Inc.
    『パタン‧ランゲージ』パタン例
    町: ⾃⽴地域‧町の分布‧フィンガー上の都市と⽥園
    ..etc
    建築: 複号建物‧⾒えない駐⾞場‧窓のある場所 ..etc
    施⼯: ⽣活空間にしたがう構造‧深い窓枠 ..etc

    View Slide

  26. © - BASE, Inc.
    パタンの相互関係
    • パタンには序列がある
    • 町→建築→施⼯は直列的なつながりで機能する
    • 各パタンは、ランゲージの上位にある特定のパタ
    ン、下位にある特定のパタンと結びつく
    C‧アレグザンダー著∕平⽥ 翰那訳『パタン‧ランゲージ―環境設計の⼿引』あるパタン‧ランゲージ

    View Slide

  27. © - BASE, Inc.
    パタン名
    上位パタンへのつながり
    下位パタンへのつながり
    写真
    本⽂
    パタン‧ランゲージのテンプレート

    View Slide

  28. 例: パタン 180 WIDOW PLACE
    パタン名: 「窓のある場所」
    上位パタンへのつながり: 「⽞関
    室」‧「禅窓」‧「どの
    部屋も2⾯採光」 ..etc
    下位パタンへのつながり: 「アルコー
    ブ」‧「低い窓台」 ..etc
    © - BASE, Inc.
    C‧アレグザンダー著∕平⽥ 翰那訳『パタン‧ランゲージ―環境設計の⼿引』あるパタン‧ランゲージ
    https://www.pinterest.jp/pin/

    View Slide

  29. © - BASE, Inc.
    パタン‧ランゲージまとめ
    • 繰り返し現れる構造を再利⽤しやすい形式にまとめ

    • パタンのテンプレート(形式)を定義している
    • 町‧建築‧施⼯の⼤きく3つの分類
    • パタンごとに相互関係を持ち、パタンを関係の順に
    適⽤していくことで建築物を⽣成する

    View Slide

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

    View Slide

  31. © - BASE, Inc.
    パタン‧ランゲージとデザインパターンの相違点
    .建築物には数千年の歴史があり、利⽤できる古典も多い。ソフトウェアシステ
    ムの場合は歴史がずっと短く、古典と呼べるものはほとんどない。
    .Alexanderはパターンを利⽤する優先順位を付けたが、我々は順位を付けてい
    ない。
    .Alexanderのパターンは扱う問題を強調しているが、我々のデザインパターン
    は解決⽅法についてより詳細に記述している。
    .Alexanderは提案したパターンによって完全な建築物が⽣成できると主張して
    いるが、我々は提案したパターンによって完全なプログラムが⽣成できるとは
    主張していない。
    ErichGamma、RichardHelm、RalphJohnson、JohnVlissides著∕本位⽥真⼀、吉⽥和樹監訳『オブジェクト指向における再利
    ⽤のためのデザインパターン改訂版』ソフトバンククリエイティブ、1999、p.

    View Slide

  32. © - BASE, Inc.
    相違点はどこから
    “建築とソフトウェアの根本的な性質の違いからくると⾔える
    でしょう。⼈が暮らす町、建物、部屋は、⼈が⼈の姿と機能
    を持っている限り、たとえば⾝⻑や体重が⼀定の範囲に収ま
    るといった暗黙の条件を備えています。しかしソフトウェア
    は、物としての実体を持っていないがゆえに、その前提条件を
    暗黙の内に規定することはできません。”
    江渡 浩⼀郎. パターン、Wiki、XP 時を超えた創造の原則 (WEB+DB PRESS plus)
    9章 デザインパターン

    View Slide

  33. © - BASE, Inc.
    デザインパターンだけでソフトウェア設計ができるわけではない
    “本書に⽰したパターンはパターン⾔語を構成しては
    いない。構築されたソフトウェアシステムの多様性を
    考えると、ステップバイステップにアプリケーション
    設計指針を与えるような 完璧な パターン集合を提供
    することは困難である”
    ErichGamma、RichardHelm、RalphJohnson、JohnVlissides著∕本位⽥真⼀、吉⽥和樹監訳『オブジェクト指向における再利
    ⽤のためのデザインパターン改訂版』ソフトバンククリエイティブ、1999、p.

    View Slide

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

    View Slide

  35. © - BASE, Inc.
    パタン‧ランゲージとの対応
    「町」 ≈ アーキテクチャ
    ex. Layers, MVC etc
    「建築」 ≈ GoFのデザインパターン
    「施⾏」 ≈ 各⾔語での実装パターン
    ex. Smalltalkベストプラクティスパターン
    書籍 江渡 浩⼀郎. パターン、Wiki、XP 時を超えた創造の原則

    View Slide

  36. © - BASE, Inc.
    “つまり⾔語には2つの機能がある。⼈間の過去の体験
    を蓄積する機能。もう1つは、その蓄積された体験
    (単語)を再利⽤(⽂法)して、無数の新しい概念
    (⽂章)を作り出すという機能である。”
    C‧アレグザンダー著∕平⽥ 翰那訳『パタン‧ランゲージ―環境設計の⼿引』訳者あとがき

    View Slide

  37. © - BASE, Inc.
    このトークでやったこと
    • デザインパターンと、その出⾃ともいえるパタン‧
    ランゲージを抑えた
    • デザインパターンという概念の輪郭を、類似するも
    のと⽐較して捉え直した
    • デザインパターンという “⾔語” を基本に次の概念
    が⽣まれているとも⾔える

    View Slide

  38. © - BASE, Inc.
    まとめ(パターン作成者視点)
    • 名前をつけて⾔語とすることによる、経験の蓄積と
    次の概念への発展の期待
    • パターンを同じテンプレートで記述することによる
    わかりやすさ

    View Slide

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

    • 全てを解決できるわけではないが、これをひとつの
    “⾔語” として現状使えている。設計の “⾔語” とし
    て活⽤できる便利さがパターンにはある

    View Slide

  40. © - BASE, Inc.
    . . - @hgsgtk

    View Slide