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

オブジェクト指向のこころ: 第5章 / DESIGN PATTERNS EXPLAINED: chapter-5

オブジェクト指向のこころ: 第5章 / DESIGN PATTERNS EXPLAINED: chapter-5

会社で「オブジェクト指向のこころ」の読書会をやっています

C90bac78c0fb61105cfd8239767f903d?s=128

hideki kinjyo
PRO

September 06, 2021
Tweet

Transcript

  1. 第5章 デザインパターンの紹介 課題図書: オブジェクト指向のこころ: デザインパターンとともに学ぶ

  2. ͲΜͳষʁ 「デザパタってどんなもの?」を紹介する章です • パターンランゲージの出⾃ • パターンランゲージから(ソフトウェア)デザインパターン へ • デザインパターンを学ぶことの”威⼒”

  3. ͸͕͖͠ 本書中では「パターンランゲージ=デザ インパターン」として扱われている感じ がありますが、GoF本の中で「アレグザ ンダーのパターンと我々のパターンには 異なることがある」と説明されていま す。 そのため、本資料中では、前者(アレグ ザンダー、オリジナル)をパターンラン ゲージ、後者(GoF、ソフトウェア)をデ

    ザインパターンと呼称します。 ※GoF本には「Alexanderの⾒⽅によれ ば、本書に⽰したパターンはパターン⾔ 語を構成してはいない」と記載がある オブジェクト指向における再利⽤のためのデザインパターン 『6.3 パターンのコミュニティ』
  4. パターンランゲージって どうやって⽣まれたの?

  5. ύλʔϯϥϯήʔδͷੜΈͷ਌ • パターンランゲージは、 クリストファ・アレグザンダー⽒が発明 したもの • ⽒は建築家です! • 建築業界で⽣まれたアイディアを、ソフ トウェアの世界にも輸⼊した流れの1つ

    が、GoFのデザインパターン クリストファー・アレグザンダー - Wikipedia https://ja.wikipedia.org/wiki/クリストファー・アレグザンダー
  6. ΞϨάβϯμʔͷ໰୊ҙࣝ • アレグザンダーは、建築家として「よい建築」を⽬指した • 彼の思う良い建築: ⽣き⽣きとした建築 • ⼈々が「⼼地よい」と感じるもの • 「⼈⼯都市」への批判

    • 居住者が歴史の中で拡張していった「⾃然都市」と⽐べて、計 画ありきで作られた「⼈⼯的な都市」には豊かさが⽋けている • 前者は「ツリー」の構造をとり、後者は「セミラチス」の構造 を取る
  7. ΞϨάβϯμʔͷࢥ૝ • オレゴン⼤学の実験 「⼈びとが⾃ら環境を管理し、⾃らの⽣活を制御す ることを可能にするようなプロセスを⽰したい」 「次のような6つの原理に従うだけで、⼈びとの要求 に合致した環境を作り出して⾏けると考えている」 • 有機的秩序の原理、参加の原理、漸進的成⻑の原 理、パターンの原理、診断の原理、調整の原理

  8. ύλʔϯ • 「パターンに備わった基本的性格とは、私たちの現 在の⽴場では、あるコミュニティに共通の基本的合 意事項を形成するもの」 • 「その環境に繰り返し出現する可能性のある課題を 表し、この課題の出現する背後の状況を⽰し、さら にこの課題を解決するのに必要なすべての建設や計 画の⼀般的性質を提供するもの」

  9. ࢀՃ • 「あるコミュニティにおいて、その有機的成⻑のプロセスを管理 できるのは、⼀般の⼈びとだけである。彼らは、⾃分⾃⾝の要求 に最も精通し、(中略)誰よりも熟知している」 • 利⽤者(=都市や建築の利⽤者 = 住む⼈=⼀般の⼈びと)は、実装者 (建築家=専⾨家、熟達者)ほどの解決能⼒を持たない。また、原

    理・原則が根底から損なわれれば、全体性が獲得できなくなる • これを「パターン」を⽤いて解決する。 • 「このパターンとは、利⽤者に設計の決定に必要な信頼できる 論拠を提供するものである」
  10. ύλʔϯͱձ࿩ͷՄೳੑ • 例えば「ユーザーインターフェース」について考えてみた時に • 専⾨的な知識や経験があると、良い感じなワイヤーフレームが書けるかも知れな い・・けど、知らない⼈はゼロから書くの厳しそう • でも”モノ”を⾒たら、「どういうのが使いやすそうか」は直感で判断できそう • もし「デザイニング・インターフェース」のようなカタログがあったとすると・・?

    • https://www.amazon.co.jp/dp/4873115310 • ユーザーと専⾨家が⼀緒に「ココにコレを置いてこんな感じにしたい」が話しやす くなる、はず。 また、専⾨家においても、経験の不⾜を補って問題やトレードオフについても説明 可能になる
  11. ༨ஊɿ ސ٬ͷຊ౰ʹཉ͔ͬͨ͠΋ͷ • あの有名なイラストは、この 「参加」の章の挿絵が原典と されている • 実際には、更に元ネタがあ るとのこと オレゴン⼤学の実験

    Ⅱ 参加
  12. ཁ͢Δʹʁ :ύλʔϯ • パターンは、過去の事例から繰り返し現れる「よいもの」 を抽出して、形式知化したもの • 利⽤者は、パターン(カタログ)によって、熟練者の知識を 利⽤して会話をすることが出来る • これによって、真に⽬指すところの「⽣き⽣きとした建

    築」の実現に⽋かせない「利⽤者参加」の原理を満たすこ とが可能になる
  13. ύλʔϯ͸Կ͕ύλʔϯ(ྨܕ)ͳͷ͔ • 「各パターンとは、我々の環境で何度も繰り返される問題を 描写し、その後、問題を解決する上での確信を描写すること で、再び同じことに頭を悩ませることなくその解決策を繰り 返し適⽤できるようにしたものである(P71)」 • 「問題」と「解決⽅法」が、繰り返し現れている事への着⽬ • もし「この問題に対して、この解決⽅法」を形式知化できれ

    ば、再利⽤できるはず
  14. ύλʔϯͷܕ • 各パターンはフォーマット(必須要素)を持つ • パターンランゲージの⾰新性の1つは、「定型フォーマットに落とし、類型化 したこと」にもある(と思う • まぁ何か「起承転結がハッキリしていて分かりやすくなる」的な感覚ある • パターンの描写に必要な4つの要素

    • パターン名: 名前があることで、議論をしやすくなったり「抽象」に集中できる • パターンの⽬的: 解決したい問題や、その⽂脈 • 解決⽅法: 設計の要素やそれらの関連についての抽象的(汎⽤的)な説明 • 考慮する必要がある制約、フォース: パターンのもたらす結果やトレードオフ
  15. ύλʔϯɾ”ϥϯήʔδ”ͱ͸ʁ • 「個々のパターンを組み合わせることで、建築の設計が達成でき る」というコンセプトがパターンランゲージ • ⾔い換えると、「個別の要素」がそれぞれ毎に意味を持ち、ある 規則性によって組み合わされた時に更に別の(⼤きな)意味を持つ ようになる • ここから「単語」と「⽂」のような関係を⾒て取った

    • ⾃⼰完結的な「要素」が結合し、構造となって意味を成すシステ ム性が「ランゲージ」
  16. ·ͱΊ: ཁ͢ΔʹԿɾɾʁ • 「うまくいっている事例」から、観察されて導出と定義が されたのが「(デザイン)パターン」 • 表⾯的に形だけを真似るのではなく、「解決したい問題は 何だったのか」にも着⽬して「問題・解決⽅法」を組み合 わせることで、利⽤しやすくしている •

    パターンの定義によって、再利⽤性や、有識者と⼀般の ⼈々の間で共有可能な解決⽅法を獲得することができる
  17. パターンランゲージの 建築以外への適⽤と ソフトウェアのデザインパターン

  18. ৭ʑͳύλʔϯϥϯήʔδ

  19. ιϑτ΢ΣΞ΁ͷύλʔϯͷ༌ೖ • ݐஙքͰͷख๏Ͱ͋Δύλʔϯϥϯήʔδ • ͔͜͜ΒɺʮύλʔϯΛఆΊͯʯʮͦΕΒͷཁૉΛ૊Έ߹͛ͯ࡞ͬ ͯΈΔʯɺʮར༻ऀͱઃܭऀ͕ձ࿩Ͱ͖ΔΑ͏ʹͳΔʯͱ͍͏Ξ ΠσΟΞΛಘͨ • ΦϒδΣΫτࢦ޲ϓϩάϥϛϯάͰͷ࣮ફ •

    “We propose a radical shift in the burden of design and implementation, using concepts adapted from the work of Christopher Alexander” (http://c2.com/doc/oopsla87.html) • ύλʔϯϥϯήʔδͷߟ͑ํΛΦϒδΣΫτࢦ޲ʹ࢖ͬͯΈΑ͏ʂ ύλʔϯΛ࡞ͬͯΈΑ͏ʂͱ͍͏஥͕ؒूͬͯίϛϡχςΟʹͳΔ • ίί͔ΒGoFຊͳͲ͕ੜ·Εͨ
  20. ΦϒδΣΫτࢦ޲ʹ͓͚Δ࠶ར༻ͷͨΊͷ σβΠϯύλʔϯ • 「オブジェクト指向に基づいてソフトウェアを設計するこ とは簡単ことではない」「”再利⽤可能な”ソフトウェアを 設計することは更に難しい」 • 「経験豊富なオブジェクト指向設計者は実に良い設計をす る。」「初⼼者が「良いオブジェクト指向設計とは何か」 を学ぶには多⼤な時間がかかる」「つまり、経験豊富な設

    計者は、初⼼者が知らない何かを知っているのである」 • 「本書の⽬的は、オブジェクト指向ソフトウェアを設計す る際の経験をデザインパターンとして記憶することであ る。」 第1章 概論
  21. ΞϨάβϯμʔͷ ύλʔϯϥϯήʔδͱͷൺֱ • GoFは「カタログからパターンを選び、組み合わせ ることで、全体を組み上げる」ことを⽬的としてい ない • GoFは「解決⽅法」をより詳細に記述している • GoFはパターンを利⽤する際の「優先順位」を定義

    していない IMO: 全体的に、建築とソフトウェアという領域を⽐較した際に「模索的 な段階にある」ことから、踏み込みが⽢いとも⾔えるような未熟さも感じ られる気がする 第6章 終わりに
  22. デザインパターンを学ぶことの”威⼒”

  23. ͳͥσβΠϯύλʔϯΛֶͿͷ͔ʁ • 解決策の再利⽤ • 既に(他⼈が!)直⾯した問題について、確⽴されている解 決⽅法を利⽤することができる • 共通⽤語の確⽴ • チーム内で、概念やその表現を共有することで、分析や

    設計において円滑なコミュニケーションを取れる
  24. トランスフォーメーションに対応するためのパターン・ランゲージ https://www.ipa.go.jp/ikc/reports/20200514_2.html

  25. ʮΦϒδΣΫτࢦ޲ͷͨΊͷʯύλʔϯ • 本書で取り上げられているデザインパターンは、 GoF本で紹介されているパターンを中⼼に紹介している • すなわち、「オブジェクト指向の良いプラクティス」という側⾯ がある • 「オブジェクト指向をやっていると良く直⾯する問題」と「その 対応⽅法」である、ということ

    • こうしたパターンに触れることで、「達⼈的なオブジェクト指向プ ログラマ」の「経験」「感覚」を先取りできる効果が期待できる
  26. ιϑτ΢ΣΞͷσβΠϯύλʔϯ͸ ୭ͷͨΊͷ΋ͷͳͷ͔ͳɾɾʁ • 都市や建築と違って、「参加」すべき「利⽤者」っていっても「エンド ユーザー」の声は要らないよね・・? • この⽂脈においては、「建築家(設計者)」と「施⼯者(実装者)」の間の コミュニケーションが円滑になる、というメリットが引き出せそう • また、「オブジェクト指向に則ったコード」は「再利⽤性」を引き出すも

    の⾜り得る • ゆえに、もし「参加の原理」の意味合いが変質していたとしても、「有 機的秩序」「漸進的成⻑」がもたらす価値を志向する点では共通点があ るといえそう
  27. Appendix

  28. Appendix: Web • デザインパターンの使い⽅を パタン・ランゲージとの⽐較から考える / design-pattern- usage-inspired-by-pattern-language - Speaker

    Deck https://speakerdeck.com/hgsgtk/design-pattern-usage-inspired-by-pattern-language • ソフトウェア開発とパタン・ランゲージ再考 https://www.slideshare.net/kkd/ss-131755865 • パターン・ランゲージ⼊⾨講座(Pattern Language Innovators Summit) https://www.slideshare.net/takashiiba/pattern-language-innovators-summit / (159) • トークセッション映像「パターン・ランゲージの使い⽅徹底解説 & 体験ワークショッ プ」(井庭崇研究室) - YouTube https://www.youtube.com/watch?v=wsiCq4puvDI • デザインパターンFAQ https://www.hyuki.com/dp/dpfaq.html
  29. Appendix: ॻ੶ • パターン、Wiki、XP 時を超えた創造の原則 WEB+DB PRESS plus | 江渡

    浩⼀郎 https://www.amazon.co.jp/dp/B07JJN5NBY/ • パターン・ランゲージ:創造的な未来をつくるための⾔語 (リアリティ・プラス) | 井 庭 崇, 中埜 博, ⽵中 平蔵, 江渡 浩⼀郎, 中⻄ 泰⼈, ⽻⽣⽥ 栄⼀, 井庭 崇 https://www.amazon.co.jp/dp/4766419871 • パタン・ランゲージ―環境設計の⼿引 | クリストファー・アレグザンダー, 平⽥ 翰那 https://www.amazon.co.jp/dp/4306041719 • オレゴン⼤学の実験 (SD選書) | クリストファー・アレグザンダー, 宮本雅明 https://www.amazon.co.jp/dp/4306051285