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

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

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

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

hideki kinjyo
PRO

September 30, 2021
Tweet

More Decks by hideki kinjyo

Other Decks in Programming

Transcript

  1. 第8章
    視野を広げる
    課題図書:
    オブジェクト指向のこころ: デザインパターンとともに学ぶ

    View Slide

  2. Կͷࢹ໺Λ޿͛ͯΔΜͩΖ͏Ͷʂʁ
    • ΦϒδΣΫτࢦ޲(ΧϓηϧԽ)ͷ3ͭͷجຊత֓೦
    • ΦϒδΣΫτɺΧϓηϧԽɺந৅Ϋϥε
    • ͜ΕΒ͕ʮͲ͏΍ͬͯ໾ʹཱ͍͔ͬͯ͘ͳʂʁҙٛਂͬ͞
    ͯͲΜͳ΋ͷʂʁʯ͔ͳʔ
    • ͪΐͬͱݪཧݪଇͷࢹ఺͔Βߟ͑ͯΈΑ͏͔ʂతͳ
    • σβύλɺΞδϟΠϧ։ൃͱ͍ͬͨ෼໺ͱͷܨ͕Γʹ΋ݴ
    ٴͯ͠ΈΔΑʂ

    View Slide

  3. ͜ͷষͷΩʔϫʔυ
    • ΦϒδΣΫτ
    • ΧϓηϧԽɾӅṭ
    • ܧঝɾಛघԽ
    • ࠶ར༻
    • ྲྀಈੑ
    • ڞ௨ੑ(෼ੳ)
    • Մมੑ(෼ੳ)
    • ந৅ɺ֓೦ɾ࢓༷ɾ࣮૷

    View Slide

  4. 従来からの考え⽅と新たな考え⽅
    8.2 オブジェクト: 従来の考え⽅と新たな考え⽅
    8.3 カプセル化

    View Slide

  5. 「君たちのオブジェクト指向は間違っている(かも)」
    「君たちのカプセル化は間違っている(かも)」
    ⾔いたいこと

    View Slide

  6. ൺ΂ͯΈΑ͏
    ैདྷͷߟ͑ํ
    ޡղ

    ৽ͨͳߟ͑ํ
    ຊ࣭

    ΦϒδΣΫτͱ͸ʁ
    ૢ࡞Λ΋ͬͨσʔλ
    σʔλͱৼΔ෣͍ ϝιου
    ͕
    ͭʹͳͬͨ΋ͷʂ
    ੹຿Λඋ࣮͑ͨମ
    ΧϓηϧԽͱ͸ʁ σʔλΛӅṭ͢Δ͜ͱʂ
    ͋ΒΏΔ΋ͷΛӅṭ͢Δ
    σʔλɺϝιουɺܕ

    View Slide

  7. それで何が変わるのか?
    (を⾒ていきます)

    View Slide

  8. ʮैདྷతʯͳΦϒδΣΫτͷځ۶͞
    • ઃܭΛ͢Δ࣌ʹʮ֓೦ʯ͔ΒೖΔͱ΍Γ΍͍͢Ͷʙͬͯ࿩͕͋
    Γ·͢(͋Γ·ͨ͠Ͷʁ)
    • ͨͩɺʮσʔλʴૢ࡞(ৼΔ෣͍)ʯͱ͍͏ଊ͑ํ͸࣮૷ʹدΓ
    ͗ͨ͢؍఺ͱ͍͏ؾ͕͢Δ
    • Ͳ͏͍͏σʔλ(ଐੑ)͕͋ͬͯɺͦΕΛͲ͏ѻ͏͔ʁΛ࠷ॳ͔
    Β஌Βͳ͍ͱઃܭ͕ୡ੒͞Εͳ͍༁Ͱ
    • ͱͯ΋ʮ֓೦Ͱߟ͑Δ(ந৅తʹ࿩Λ͢Δ)ʯͱ͸ݴ͑ͳ͍ʂ

    View Slide

  9. ※ ͪΐͬͱ͓஌Βͤ
    ʮ੹೚Ͱߟ͑ΔͱԿ͕ྑ͍Μ͚ͩͬʁʯʹ͍ͭͯ͸1ষΛ͓
    ͞Β͍ͯ͠ΈͯͶʂ
    • 1.5 ཁٻͷมߋʹऔΓ૊Ή
    • 1.6 ΦϒδΣΫτࢦ޲ύϥμΠϜ
    参考:
    オブジェクト指向のこころ: 第1章 / DESIGN PATTERNS EXPLAINED: chapter-1 - Speaker Deck
    https://speakerdeck.com/o0h/design-patterns-explained-chapter-1?slide=22

    View Slide

  10. ΦϒδΣΫτΛʮ੹೚ʯͰߟ͑Δ
    • ֓೦্ͷ؍఺ʹج͍ͮͯோΊΔͱɺΦϒδΣΫτͱ͸੹೚Λ
    උ࣮͑ͨମͰ͋Δͱଊ͑ΒΕΔ
    • ʮ੹೚ΛՌͨ͢ʯͨΊʹσʔλ΍ৼΔ෣͍Λ͍࣋ͬͯΔ
    • ݺͼग़͠ଆʹରͯ͠੹೚ΛՌͨ͢ओମͰ͋Γɺʮ಺෦͕Ͳ
    ͏ͳ͍ͬͯΔ͔ʯ͸ݺͼग़͠ଆʹ࿐ఄͤ͞ͳ͍ͰOK
    • ద੾ͳ੹೚ΛՌͨͤΔΑ͏ʹઃܭͯ͠ɺࣗ෼ͷ੹೚Λ୭͔ʹ
    όϥࢃ͔ͳ͍ଘࡏͰ͋Γ͍ͨͳ͊(ߴڽूɾ௿݁߹)

    View Slide

  11. ͲʔΏʔ͜ͱͳͷ͔ͳ
    ྫ͑͹ʮਤܗඳըʯΫϥεͰߟ͑ͯΈΔ
    • ΦϒδΣΫτͱ͸σʔλʴৼΔ෣͍
    • ௖఺ͷ࠲ඪ৘ใ(ଐੑ)ͱඳըɾදࣔ(ૢ࡞)Λ࣋ͭԿ͔
    • ΦϒδΣΫτͱ͸੹຿Λඋ࣮͑ͨମ
    • ਤܗΛඳ͖͍ͨ࣌ʹྑ͍ײ͡ʹ΍ͬͯ͘ΕΔԿ͔

    View Slide

  12. ֓೦ͷ؍఺ʹج͍ͮͨઃܭ
    • ʮ֓೦͚ͩͰઃܭΛਐΊΒΕΔʯͱ͍͏ײ͕֮େࣄʂ
    • ઃܭͷஈ֊ͰʮৄࡉΛ੾Γ཭͠ʯͯߟ͑΍͘͢ͳΔ
    従来的な考え⽅
    新しい考え⽅
    「座標データ」が必要
    で、「描画・表⽰の⼿続き」も考
    える必要があるな・・・
    図形を描きたいな・・
    それ⽤の描画できる何かを
    作っておこう
    ৄࡉͱີʹͳΓ΍͍͢
    ৄࡉ͸੾Γ཭͞ΕΔ
    ࣮૷؍఺Ά͍
    ֓೦্ͷ؍఺Ά͍

    View Slide

  13. ΦϒδΣΫτʹର͢Δଊ͑ํͷϙΠϯτ
    • ৽͍͠ߟ͑ํʹΑͬͯɺʮͲ͏࣮૷͞ΕΔ͔ʯΑΓʮԿΛ࣮ߦ͢
    Δͷ͔(໨త)ʯʹؔ৺ΛूதͰ͖Δ
    • ʮ࣮૷Ͱ͸ͳ͘ಈػʹண໨͢Δʯ͸σβύλʹසग़ͷ؍఺
    • ৄࡉΑΓઌʹ༧උతͳઃܭΛߦ͑ΔΑ͏ʹͳΔ
    • શͯ(ৄࡉ)Λચ͍ग़͞ͳͯ͘΋ઃܭͰ͖Δ
    • “࣮૷ΛΠϯλʔϑΣʔεͷഎޙʹӅṭ͢Δ͜ͱͰɺ࣮૷ͱͦΕ
    Λ࢖༻͢ΔΦϒδΣΫτΛ෼཭͢Δ͜ͱʹͳΔΘ͚Ͱ͢(P106)”
    • ʮखଓ͖తͳߟ͑ํʯ͔ΒʮΦϒδΣΫτࢦ޲ʯ΁ʂ

    View Slide

  14. ʮैདྷతʯͳΧϓηϧԽͷ෺଍Γͳ͞
    • ʮΧϓηϧԽͱ͸σʔλӅṭʯͰ͸ͳ͘ɾɾɾ
    • σʔλͷӅṭ͸ʮΧϓηϧԽͷݶΒΕͨҰ໘ʯ
    • ΧϓηϧԽͱ͸ʮ͋ΒΏΔ΋ͷͷӅṭʯͱଊ͑Δ΂͖
    • ͜͜ͷ”ࢹ໺͕ڱ͘”ͳͬͯ͠·͏ͱɺຊ࣭͔Βԕ͔͟Δ
    • σʔλɺ࣮૷ɺ೿ੜΫϥεɺઃܭͷৄࡉɺ࣮ମԽͷنଇ
    etc.

    View Slide

  15. ͳΜͰʮσʔλͷӅṭʯ͚ͩ͡Ό෺଍ΓΜͷ͡ΌΖ
    • ຊॻͰΧϓηϧԽͱݴ͍ͬͯΔͷ͸ɺʮݺͼग़͠ݩʹରͯ͠Ӆṭ
    ͢Δʯʮ௚઀৮ΕΒΕͳ͘͢Δʯ͜ͱΛ௨ͯ͡ʮҙࣝͰ͖ͳ͘͢
    Δʯͱ͍͏χϡΞϯε͕ڧ͍ؾ͕͢Δ
    • ͜ΕʹΑͬͯɺ࣍ͷར఺(ڧΈ)͕֫ಘ͞Εͦ͏
    • ௿݁߹Խ͠΍͘͢ͳΔ
    • ʮந৅ʹରͯ͠ϓϩάϥϛϯά͠ΖʯݪଇΛୡ੒ͨ͠Γɺʮϙ
    ϦϞʔϑΟζϜΛ׆͔͢ʯͱ͍͏ςΫχοΫ͕࢖͍΍͘͢ͳΔ
    • ʮ֓೦ͷ؍఺Ͱߟ͑Δʯ্ͰɺʮΧϓηϧԽʯͷύϫʔ͕͔ܽͤ
    ͳ͍ʂ(ͱ͍͏ߟ͑ํͳΜ͡Όͳ͍͔ͳ͊)

    View Slide

  16. σʔλͷΧϓηϧԽ
    • ʮσʔλΛ֎෦͔ΒӅṭ͢Δʯͱ͏ͷ͸Ͳ͏΍Δ͔ʁͱ͍
    ͏ͷ͸ɺΠϝʔδ͕༙͖΍͍͢ͱࢥ͍·͢ͷͰʂ
    • ͜͜Ͱ͸঺հΛׂѪ͠·͢

    View Slide

  17. ϝιουͷΧϓηϧԽ
    • ʮந৅(abstract,interface)ʹରͯ͠ϝοηʔδϯάΛͯ͠
    ΋ɺ۩৅(concrete)ͷϝιου͕࣮ߦ͞Ε͍ͯΔ(΋͘͠͸
    ͦͷٯ)ʯͱ͍͏Մೳੑ͕͋Δɾɾͱ͍͏Ӆṭ
    • ͕ɺ࣮ࡍͷॴ͸ݺͼख͕ʮͲ͕࣮ͬͪߦ͞ΕΔ͔ʯ͸ҙ
    ࣝ͠ͳͯ͘ྑ͍
    関連:
    リスコフの置換原則 - Wikipedia https://ja.wikipedia.org/wiki/リスコフの置換原則

    View Slide

  18. ϝιουͷΧϓηϧԽ
    • alignShape()͸Shape::setLocation()Λ
    ࣮ߦ͍ͯ͠Δ͕ɺ࣮ࡍͷॲཧ͸
    Circle::setLocation()ʹͳ͍ͬͯΔ
    • ॏཁͳͷ͸ʮݺͼग़͠ଆ͕ɺͦͷϝιο
    υͷଘࡏͱ࢖͍ํΛ஌͍ͬͯΔ͜ͱʯͰ
    ͋Γɺ͔ͦ͜Βઌ͸ΦϒδΣΫτͷ੹೚
    ͱͳΔ

    View Slide

  19. ܕͷΧϓηϧԽ
    • ݺͼग़͠ଆʹରͯ͠ɺϨγʔό(ݺͼग़͞Εͨଆ)͕ʮԿͷΫϥε
    ͷΦϒδΣΫτͳͷ͔ʯ͸Ӆṭ͞ΕΔ
    • ΦϒδΣΫτXͳͷ͔ɺͦΕͱ΋αϒΫϥεͷΦϒδΣΫτY
    ͳͷ͔ɾɾʁ
    • “ܕͷΧϓηϧԽ͸ɺϙϦϞʔϑΟζϜΛ࢖༻͢Δந৅Ϋϥεͱ
    ͦͷ೿ੜΫϥε(·ͨ͸ΠϯλʔϑΣʔεͱͦͷ࣮૷)ʹΑͬͯੜ
    Έग़͞Ε·͢(P107)”

    View Slide

  20. ܕͷΧϓηϧԽ
    • $shape͕Shapeͷੑ࣭Λ࣋ͭΦϒ
    δΣΫτ(is-a)Ͱ͋Δ͜ͱ͸෼͔ͬͯ
    ͍Δ͕ɺͦͷ࣮ମ͕ԿͰ͋Δ͔ʹͭ
    ͍ͯ͸ؔ৺͕ͳ͍(Կ͕དྷͯ΋ಈ͘)
    • Circle͔΋஌Εͳ͍͠ɺ
    Rectangle͔΋஌Εͳ͍ɾɾɾ
    • ͜ͷΑ͏ͳʮಉؔ͡ΘΓํʯͰ΋
    ʮঢ়گʹԠͯ͡ଟ༷ͳಈ͖ํΛ͢
    Δʯͷ͕ϙϦϞʔϑΟζϜ

    View Slide

  21. ֓೦ͱͯ͠ͷܧঝvs࠶ར༻ͷͨΊͷܧঝ
    • ͔ͭͯܧঝʹ͍ͭͯड़΂ΒΕ͍ͯͨ͜ͱ
    • ίʔυͷ࠶ར༻(࿪ΜͩҙຯͰͷDRYతͳ)ͷͨΊʹɺ
    ʮݩʑ͋ͬͨΫϥε͔Βɺಛఆͷঢ়گʹରԠ(ಛԽ)͢΂͘
    ར༻Ͱ͖Δʯͱ͍͏ํ๏
    • ΑΓ֓೦తͳΞϓϩʔνํ๏ͱͯ͠ѻ͏͜ͱͰɺརӹΛੜ
    Ή͜ͱ͕Ͱ͖Δ͸ͣ
    • ΋ͬͱʮࢹ໺Λ޿͛ͯʯΦϒδΣΫτ΍ΧϓηϧԽɺܧ
    ঝΛѻ͏͜ͱͰɺ֦ுੑͷߴ͍ίʔυΛ࡞ΕΔ

    View Slide

  22. ࠶ར༻ͷͨΊͷܧঝͷ᠘
    ʮޒ֯ܗΛಛԽ͠ɺಛघͳԑͷޒ֯ܗʯΛ࡞ͬͨྫɻ͜Ε͸࣍ͷ໰୊Λ͸ΒΉ
    1. ڽूੑͷ௿Լ
    • ʮಛԽʯͤ͞Δࡍʹɺຊདྷͱ͸ҧ͏ྨͷ࢓ࣄΛר͖ࠐΜͰ͠·͍ͬͯΔ
    (ʮԑΛѻ͏ʯͱ͍͏෦෼ɻShapeͰ͸ͳ͘Pengtagonͷ࢓ࣄͰ͍͍ͷʁ)
    2. ࠶ར༻ੑͷ௿Լ
    • ʮಛघͳԑʯ͚ͩΛѻ͍ͨͯ͘΋ɺʮಛघͳԑͷޒ֯ܗʯʹ͸ʮޒ֯ܗʯ
    ػೳ͕༊ண͍ͯ͠ΔͷͰɺ֎͔Β͸ར༻Ͱ͖ͳ͍
    3. มԽʹ௥ैͰ͖ͳ͍
    • ཁٻͷมԽɾ૿େʹԠͯ͡ඞཁͳόϦΤʔγϣϯ͕૿͑ଓ͚Δ΋ͷͷɺʮಛ
    ԽʯͰରԠ͠Α͏ͱͨ͠৔߹ɺΫϥε͕૿͑·ͬͯ͘ݫ͘͠ͳΔ

    View Slide

  23. ֓೦ͱͯ͠ͷܧঝ
    • ”ಉ͡ৼΔ෣͍Λڞ༗͢Δ΋ͷʹண໨͠”ͬͯɺʮ࠶ར༻ͷͨ
    Ίͷܧঝʯͱҧ͏ͷ͔ʁ
    • (͜Ε͸ଟ෼8.5અΛݟͨ΄͏͕෼͔Γ΍ͦ͢͏
    • ͬ͘͟Γ͍͏ͱ
    • ʮ۩৅ˠߋʹಛԽʯతͳͷ͕ʮ࠶ར༻ͷͨΊͷʙʯͱ͍͏
    ؍఺
    • ʮҰൠੑɾࠎࢠʯʹண໨ͯ͠ʮಉଐΛද֓͢೦Λ෼ྨ͢Δ
    (൚Խ͢Δ)ʯతͳͷ͕ʮ֓೦ͷͨΊͷʙʯͱ͍͏؍఺

    View Slide

  24. ΧϓηϧԽʹର͢Δଊ͑ํͷϙΠϯτ
    • σʔλ͚ͩͰͳ͍ɺ͋ΒΏΔ΋ͷͷӅṭ͕ͦ͜ΧϓηϧԽ
    ͷೳྗ
    • GoF͕ΧϓηϧԽʹ͍ͭͯݴٴ͍ͯ͠Δࡍʹ͸ɺେମ͕ܕ
    ͷΧϓηϧԽͷ͜ͱ(ͱ͍͏͘Β͍ॏཁʂ)
    • ୯ͳΔʮ࣮૷ࡁΈͷίʔυͷ࠶ར༻ʯͷͨΊͰ͸ͳ͘ɺ
    ࢹ໺Λ޿͛ͯʮܧঝͷҙຯʯΛଊ͍͑ͯ͘ͷ͕େࣄ

    View Slide

  25. 変わること、変わらないこと、差分
    8.4 流動的要素を⾒つけ出し、それをカプセル化する
    8.5 共通性/可変性分析と抽象クラス

    View Slide

  26. ͋ͳͨͷઃܭʹ͓͍ͯɺԿΛྲྀಈతཁૉͱ͢Δ΂͖͔Λߟ࡯ͯ͠
    ͍ͩ͘͞ɻ
    ͜ͷΞϓϩʔν͸ɺ࠶ઃܭͷݪҼʹண໨͢Δͱ͍͏΋ͷͱ͸ਖ਼൓ରͱͳͬͯ
    ͍·͢ɻઃܭมߋΛڧ͍ΔՄೳੑͷ͋Δ΋ͷ͕Կ͔Λߟ͑ΔͷͰ͸ͳ͘ɺ࠶
    ઃܭͤͣʹԿΛมߋՄೳʹ͢Δͷ͔Λߟ͑ΔͷͰ͢ɻ͜͜Ͱண໨͍ͯ͠Δͷ
    ͸ɺྲྀಈత֓೦ͷΧϓηϧԽͰ͋Γɺଟ͘ͷσβΠϯύλʔϯͷςʔϚͱ΋
    ͳ͍ͬͯΔ΋ͷͰ͢ɻ
    1


    View Slide

  27. ͪΐͬͱدΓಓ: ݪஶͩͱ͜Μͳײ͡
    • ʮͲͷΑ͏ʹύλʔϯΛબ୒͢Δ
    ͔ʯͱ͍͏จ຺Ͱग़ͯ͘Δ
    • ࠶ઃܭͷݪҼʹয఺ΛߜΔ =
    ʮ֦ுੑɾมߋੑΛ௿Լͤ͞ΔΑ
    ͏ͳઃܭΛ͍ͯ͠ͳ͍͔Λ୳Δʯ
    • ٯͷΞϓϩʔν = ʮมߋ͕ൃੜ
    ͦ͠͏ͳՕॴΛ༧ݟ͠ɺ༧Ίઃܭ
    ʹ৫ΓࠐΜͰ͓͘ʯ
    オブジェクト指向における再利⽤のためのデザインパターン 改訂版
    P41

    View Slide

  28. ͪΐͬͱدΓಓ: ࠶ઃܭͷݪҼ
    ʮ࠶ઃܭΛ༨ّͳͤ͘͞ΔݪҼʯͱͯ͠8ͭͷ఺Λྻڍ
    1. Ϋϥε໊Λ໌നʹنఆͯ͠Φ
    ϒδΣΫτΛੜ੒͢Δ
    2. ಛఆͷΦϖϨʔγϣϯ΁ͷґ

    3. ϋʔυ΢ΣΞ΍ιϑτ΢ΣΞ
    ϓϥοτϑΥʔϜ΁ͷґଘ
    4. ΦϒδΣΫτͷදݱ͋Δ͍͸
    ࣮૷΁ͷґଘ
    5. ΞϧΰϦζϜ΁ͷґଘ
    6. ີͳ݁߹
    7. αϒΫϥεԽʹΑΔػೳͷ֦

    8. ؆୯ͳΫϥεมߋ͕ෆՄೳͰ
    ͋Δ͜ͱ

    View Slide

  29. ͋ͳͨͷઃܭʹ͓͍ͯɺԿΛྲྀಈతཁૉͱ͢Δ΂͖͔Λߟ࡯ͯ͠
    ͍ͩ͘͞ɻ
    ͜ͷΞϓϩʔν͸ɺ࠶ઃܭͷݪҼʹண໨͢Δͱ͍͏΋ͷͱ͸ਖ਼൓ରͱͳͬͯ
    ͍·͢ɻઃܭมߋΛڧ͍ΔՄೳੑͷ͋Δ΋ͷ͕Կ͔Λߟ͑ΔͷͰ͸ͳ͘ɺ࠶
    ઃܭͤͣʹԿΛมߋՄೳʹ͢Δͷ͔Λߟ͑ΔͷͰ͢ɻ͜͜Ͱண໨͍ͯ͠Δͷ
    ͸ɺྲྀಈత֓೦ͷΧϓηϧԽͰ͋Γɺଟ͘ͷσβΠϯύλʔϯͷςʔϚͱ΋
    ͳ͍ͬͯΔ΋ͷͰ͢ɻ
    1


    ཁ఺Λૡ͍ఠΉͱɺ
    ʮྲྀಈతཁૉΛݟ͚ͭग़͠ɺͦΕΛΧϓηϧԽ͢Δʯͷ͕ॏཁͱ͍͏͜ͱ

    View Slide

  30. ྲྀಈੑ(มಈੑ)ͬͯԿʁ
    • ʮมΘΓͦ͏ͳ෦෼ʯͱ͍͏ͱܦ࣌తมԽͬΆ͍ʁ
    • ࣮ࡍʹ͸ɺೖΕସ͑ΔϞϊͰ͋Εಉ࣌ظʹଘࡏ͢ΔόϦΤʔγϣϯͰ
    ͋ΕʮྲྀಈੑʯͱΈͳ͢
    • ྫ͑͹ɾɾɾ
    • ૿͑ͦ͏ͳ΋ͷ΍ݮΓͦ͏ͳ΋ͷ
    • (ઌͷྫ)ਤܗͷछྨ͕૿͑ͨɺʮࣗసंʯʹʮϩʔυόΠΫʯ͕௥Ճ
    • มΘΓͦ͏ͳ΋ͷ
    • ΞϧΰϦζϜΛม͍͑ͨɺσʔλ͕૿͖͔͑ͯͨΒετϨʔδΛม
    ͍͑ͨɺAPI͕ഇࢭ͞Εͨ

    View Slide

  31. ྲྀಈੑͱΧϓηϧԽ
    • ʮมԽ͠ʹ͍͘෦෼ʯͱʮྲྀಈతཁૉʯΛൃݟ͠ɺ
    ʮ໨త(֓೦ɾந৅)ʯ͔Β੾Γ཭ͯ͠ʮৄࡉ(࣮૷ɾ۩৅)ʯͱ۠
    ผͰ͖Δͱ˕
    • ྫ͑͹Facade͸ʮαϒγεςϜ(ৄࡉ)ͱ͍͏ྲྀಈੑʯΛΫϥΠ
    Ξϯτ(্ྲྀ)͔ΒӅṭ͢Δ΋ͷ
    ※ʮܕͷӅṭʹ͍ͭͯߟ͑Δ͜ͱͷҙٛʯΈ͍ͨͳͷ͸ɺ͜ͷઅͰ
    ཱͪࢭ·Βͣʹ࣍અ(ڞ௨ੑͱՄมੑ)Λཧղ͢Δํ͕ڞײͰ͖ͦ͏

    View Slide

  32. ڞ௨ੑ/Մมੑ
    • ڞ௨ੑ/Մมੑ෼ੳ: ڞ௨ੑͱՄมੑΛ෼ੳʹΑͬͯൃݟ͢Δ
    • ྲྀಈతཁૉ => Մมੑ
    • ඇྲྀಈతཁૉ => ڞ௨ੑ
    • ڞ௨ੑΛ͍࣋ͬͯΔཁૉ: ϑΝϛϦ
    • ڞ௨ੑ(ϑΝϛϦ)͸֓೦্ͷ؍఺ΛɺՄมੑ(ϑΝϛϦߏ੒һ)
    ͸࣮૷্ͷ؍఺ʹؔ࿈͢Δ

    View Slide

  33. ;Θ;Θͨ͠ྫ
    • ʮຯḩϥʔϝϯʯʮে༉ϥʔϝϯʯʮಲࠎϥʔϝϯʯʮਏ
    ຯḩϥʔϝϯʯʮւଽνϟʔγϡʔϥʔϝϯʯʮে༉ϥʔ
    ϝϯʯͱ͍ͬͨΦϒδΣΫτ͕ɺͱ͋ΔγεςϜͷ࣮૷ʹ
    ඞཁͩͬͨͱ͠·͢
    • ͜ͷதͰɺʮօ͕͍࣋ͬͯΔ΋ͷʯʮօ͕͍࣋ͬͯΔ͕಺
    ༰͕ҟͳΔ΋ͷʯΛߟ͑ΔͷͰ͢

    View Slide

  34. ;Θ;Θͨ͠ྫ
    • ͜ΕΒͷʮશͯʯʹؚ·ΕΔ΋ͷ͸ʁ
    • ໙Λ࣋ͭ
    • εʔϓΛ࣋ͭ
    • ثΛ࣋ͭ
    • τοϐϯάΛ࣋ͭ
    • ඒຯ͍͠
    • ͜ΕΒͷʮࠩ෼͕͋Δʯ΋ͷ͸ʁ
    • εʔϓ
    • τοϐϯά

    View Slide

  35. ;Θ;Θͨ͠ྫ
    • ڞ௨ੑʹண໨ͯ͠ʮϑΝϛϦ: ϥʔϝϯʯ͕ߏ੒͞ΕΔ
    • ϥʔϝϯͱ͍͏֓೦͕ੜ·ΕΔ
    • ্ख͍͚͘͹ίϨ͸ͦͷ··ʮυϝΠϯʯʹͳΔ
    • ্ख͍͚͘͹ίϨ͸ͦͷ··ʮந৅(Ϋϥε)ʯʹͳΔ
    • ʮεʔϓʯʮτοϐϯάʯ͸ɺʮϝϯόͱͳΔ͕಺༰͕ҟͳ
    Δʯ΋ͷͰʮՄมύϥϝʔλʯͱݺ͹ΕΔ
    • ڞ௨ੑ͸ɺϑΝϛϦ಺ͷ͢΂ͯͷߏ੒һʹରͯ͠ʮਅʯͱͳΔ
    • ͜͜ΛޡΔͱʮྑ͍ந৅ԽʯʹࢸΒͳ͍

    View Slide

  36. ;Θ;Θͨ͠ྫ
    • ໙ͷߗ͞ͱ͔ྔͱ͔ҧΘͶʁͬͯ͜ͱ͸Մมੑʁ
    • ͦ͜Βล͕มΘͬͯ΋ে༉ϥʔϝϯ͸ে༉ϥʔϝϯͳײ͡
    • Ramen::$menϝϯόʔʹMenΠϯελϯεΛ࣋ͨͤͪΌ͏ͳͲ
    • ͳ͓Ramenʹ໙ͷදݱΛʮ໙ͷྔʯͰ࣋ͨͤΔͱਏ͘ͳΔ
    • ৼΔ෣͍෇͖ͷΦϒδΣΫτʹ͓͚ͯ͠͹ʮϥʔϝϯυϝΠϯʯʹର͠
    ͯʮ໙αϒυϝΠϯʯͷ஌ࣝΛ੾Γ཭ͤΔՄೳੑ
    • νϟʔγϡʔ໙͕ʮνϟʔγϡʔτοϐϯάͷে༉ϥʔϝϯʯ͔͸෼͔ΒΜ
    • ʮঢ়ଶʯͱͯ͠දݱ͢Δ͔ʮΦϒδΣΫτʯͱͯ͠දݱ͢Δ͔͸ઃܭ࣍ୈ
    • (ͦ΋ͦ΋ʮϥʔϝϯʯͰ୯Ұ(۩৅)ΫϥεͰࡁΉՄೳੑ΋͋Δ

    View Slide

  37. ;Θ;Θͨ͠ྫ
    • શͯͷϥʔϝϯͨͪ͸ʮϑΝϛϦߏ੒һʯͱͳΔ
    • ʮಉ͡ϑΝϛϦʯͷதͰɺߏ੒һΛݸผԽ͢Δͷ͸ʮՄมੑͷத਎ʯ
    • ʮεʔϓ(Մมύϥϝʔλ) = ຯḩʯͰʮ ຯḩϥʔϝϯʯΈ͍ͨͳ
    • ՄมੑʹΑͬͯɺϑΝϛϦͷதͷ͢΂ͯͷߏ੒һ͕දݱͰ͖Δ(͢΂ͯͷߏ੒һΛ໢
    ཏ͢Δ)͔ʁ
    • ʮثʹ໙ͱεʔϓ͕ೖ͍ͬͯͯτοϐϯά͕৐͍ͬͯͯඒຯ͍͠ʯͱͨ͠Βɺ
    ϥʔϝϯͱݴ͑ΔʁϑΝϛϦΛఆٛ͢Δ(ͦͷϑΝϛϦͨΒ͠Ί͍ͯΔ)΋ͷ͸ʁ
    • ʮՄมੑͰઆ໌͕͔ͭͳ͍ߏ੒һʯ΍ʮҰ෦ͷߏ੒һͷͨΊ͚ͩͷՄมੑʯͳͲ
    • ِͰ͋Δ৔߹ɺޡͬͨؔ࿈෇͚(෼ྨʹಉ͡ϑΝϛϦͱΈͳ͢)͕ߦΘΕ͍ͯΔՄ
    ೳੑ͕͋Δ => ௿ڽू

    View Slide

  38. ͳͥʮ֓೦ʯతʹߟ͑΍͘͢ͳΔͷ͔ʁ
    • චऀͷओு
    • ैདྷతͳʮ໊ࢺͱಈࢺΛநग़͠ɺΦϒδΣΫτΛ࡞Δʯ
    ͱ͍͏Ξϓϩʔν͸ʮਂ͍Ϋϥε֊૚͕࡞ΒΕͯ͠·͍
    ͕ͪʯ
    • ڞ௨ੑ/Մมੑʹ஫໨͢Δͱʮڞ௨͢Δ֓೦ʹ͓͚Δྲྀಈ
    తཁૉʯ͕ݦΕ΍͘͢ͳΔ

    View Slide

  39. ͳͥʮ֓೦ʯతʹߟ͑΍͘͢ͳΔͷ͔ʁ
    • Ͳ͜ʹมԽ͕͋Δͷ͔ʁ
    • CoplienͷΞϓϩʔν΋ʮ࠷ॳʹυϝΠϯࣙॻΛ࡞Δʯ͜ͱ
    ͔ΒೖΔͷͰɺͦ͜͸ࣅ͍ͯΔͱ΋ݴ͑Δ
    • ͦͷޙʹʮڞ௨ੑɾՄมੑΛݟ͚ͭΔʯͱ͍͏෼ੳ޻ఔ͕ೖ
    Δ఺
    • ͜͜Ͱந৅Խ = ֓೦্ͷ؍఺͔Βͷ࠶੔ཧ͕ߦΘΕΔ
    • ऄ଍: ෼ੳͷࡍʹ͸ڞ௨ੑͱՄมੑ͸ʮಉ࣌ʹߟ͑Δʯͷ͕Φ
    εεϝ(by Coplien)

    View Slide

  40. ͳͥʮ֓೦ʯతʹߟ͑΍͘͢ͳΔͷ͔ʁ
    • ʮഅ͸૸ΓɺӉ஦ધ͸ඈͿʯͱ͍͏৘ใ͔Β
    • ʮ৐Γ෺͸ҠಈखஈΛ࣋ͭʯͱ͍͏ந৅ԽΛߦ͏
    • ʮҠಈखஈ͸৐Γ෺ʹΑΓҟͳΔʯͱ͍͏ࠩ෼ͷఆٛΛߦ͏
    • walk/flyϝιουΛఆٛ͢ΔͷͰ͸ͳ͘ɺந৅ϝιουmove͕
    ൃ૝͞Εͦ͏
    • ந৅-ଟ༷ͷੈք؍ʹΞϓϩʔν͠΍͍͢
    • ʮ۩৅͕ݻ༗ͷೳྗΛ࣋ͭʯͷͰ͸ͳ͘ʮந৅ͷՄมੑΛ࣋
    ͭʯͱ͍͏؍఺

    View Slide

  41. ʮྲྀಈੑʹண໨͢Δʯ͜ͱͷϙΠϯτ
    • ΍Γ͍ͨ͜ͱ͸ʮมΘΓʹ͍͘෦෼ʯΛʮมΘΓ΍͍͢෦
    ෼ʯ͔Βอޢ͢Δ͜ͱ
    • มΘΓ΍͍͢ = όϦΤʔγϣϯ͕͋Δɺ͕࣌ؒܦͭͱ෗Δ
    • ੾Γ཭͓ͯ͘͜͠ͱͰɺʮ࠶ઃܭ͕ඞཁͳ͍ʯίʔυΛੜ
    Έ΍͘͢ͳΔ
    • ʮྲྀಈੑ(Մมੑ)ʯΛʮಛԽʯͰɺʮ҆ఆͨ͠෦෼(ڞ௨
    ੑ)ʯΛʮந৅ʯ΁͍࣋ͬͯ͜͏ͱ͍͏ൃ૝
    • ৄࡉͳʮࠩ෼ʯΛࣺ૾ͯ͠ʮ֓೦ʯϨϕϧͰϞσϦϯά͢Δ

    View Slide

  42. 事前設計 vs 適応的な開発
    8.6 アジャイル開発における品質

    View Slide

  43. ΞδϟΠϧͱσβύλ͸஥ѱ͍ͷʁ
    • ͦΜͳίτͳ͍Αʂʂ
    • σβΠϯύλʔϯ͸ʮࣄલͷઃܭʯͱݺ͹ΕΔ͜ͱ΋͋Δ
    • ʮΧλϩά͔ΒબΜͰιϑτ΢ΣΞΛ૊ΈཱͯΔʯతͳ
    • ଞํͰΞδϟΠϧ͸ʮแׅతͳυΩϡϝϯτΑΓ΋ಈ͘ι
    ϑτ΢ΣΞΛʯ
    • ʮࣄલͷઃܭΛߦΘͳ͍Α͏ʹઆ͘΋ͷʯͳͷ͔ʁ

    View Slide

  44. ιϑτ΢ΣΞͷ඼࣭
    • GoF͸ʮ࠶ઃܭΛߦΘͳͯ͘ࡁΉΑ͏ʹʯɺΞδϟΠϧ͸
    ʮదԠతͳ։ൃΛଓ͚͍ͯ͘ʯ͜ͱͰɺιϑτ΢ΣΞͷՁ
    ஋ΛߴΊΑ͏ͱ͢Δ
    • ྆ऀ͸ಉ༷ͷ඼࣭ΛٻΊ͍ͯΔ(ͱචऀ͸ؾ෇͘)
    • ௿͍৑௕ੑɺՄಡੑɺςετՄೳੑ
    • ※͜͜Ͱݴ͍ͬͯΔͷ͸XP(ͷٕज़తϓϥΫςΟε)

    View Slide