Save 37% off PRO during our Black Friday Sale! »

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

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

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

C90bac78c0fb61105cfd8239767f903d?s=128

hideki kinjyo
PRO

September 30, 2021
Tweet

Transcript

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

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

    • σβύλɺΞδϟΠϧ։ൃͱ͍ͬͨ෼໺ͱͷܨ͕Γʹ΋ݴ ٴͯ͠ΈΔΑʂ
  3. ͜ͷষͷΩʔϫʔυ • ΦϒδΣΫτ • ΧϓηϧԽɾӅṭ • ܧঝɾಛघԽ • ࠶ར༻ •

    ྲྀಈੑ • ڞ௨ੑ(෼ੳ) • Մมੑ(෼ੳ) • ந৅ɺ֓೦ɾ࢓༷ɾ࣮૷
  4. 従来からの考え⽅と新たな考え⽅ 8.2 オブジェクト: 従来の考え⽅と新たな考え⽅ 8.3 カプセル化

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

  6. ൺ΂ͯΈΑ͏ ैདྷͷߟ͑ํ ޡղ ৽ͨͳߟ͑ํ ຊ࣭ ΦϒδΣΫτͱ͸ʁ ૢ࡞Λ΋ͬͨσʔλ σʔλͱৼΔ෣͍ ϝιου ͕

    ͭʹͳͬͨ΋ͷʂ ੹຿Λඋ࣮͑ͨମ ΧϓηϧԽͱ͸ʁ σʔλΛӅṭ͢Δ͜ͱʂ ͋ΒΏΔ΋ͷΛӅṭ͢Δ σʔλɺϝιουɺܕ
  7. それで何が変わるのか? (を⾒ていきます)

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

    • ͱͯ΋ʮ֓೦Ͱߟ͑Δ(ந৅తʹ࿩Λ͢Δ)ʯͱ͸ݴ͑ͳ͍ʂ
  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
  10. ΦϒδΣΫτΛʮ੹೚ʯͰߟ͑Δ • ֓೦্ͷ؍఺ʹج͍ͮͯோΊΔͱɺΦϒδΣΫτͱ͸੹೚Λ උ࣮͑ͨମͰ͋Δͱଊ͑ΒΕΔ • ʮ੹೚ΛՌͨ͢ʯͨΊʹσʔλ΍ৼΔ෣͍Λ͍࣋ͬͯΔ • ݺͼग़͠ଆʹରͯ͠੹೚ΛՌͨ͢ओମͰ͋Γɺʮ಺෦͕Ͳ ͏ͳ͍ͬͯΔ͔ʯ͸ݺͼग़͠ଆʹ࿐ఄͤ͞ͳ͍ͰOK •

    ద੾ͳ੹೚ΛՌͨͤΔΑ͏ʹઃܭͯ͠ɺࣗ෼ͷ੹೚Λ୭͔ʹ όϥࢃ͔ͳ͍ଘࡏͰ͋Γ͍ͨͳ͊(ߴڽूɾ௿݁߹)
  11. ͲʔΏʔ͜ͱͳͷ͔ͳ ྫ͑͹ʮਤܗඳըʯΫϥεͰߟ͑ͯΈΔ • ΦϒδΣΫτͱ͸σʔλʴৼΔ෣͍ • ௖఺ͷ࠲ඪ৘ใ(ଐੑ)ͱඳըɾදࣔ(ૢ࡞)Λ࣋ͭԿ͔ • ΦϒδΣΫτͱ͸੹຿Λඋ࣮͑ͨମ • ਤܗΛඳ͖͍ͨ࣌ʹྑ͍ײ͡ʹ΍ͬͯ͘ΕΔԿ͔

  12. ֓೦ͷ؍఺ʹج͍ͮͨઃܭ • ʮ֓೦͚ͩͰઃܭΛਐΊΒΕΔʯͱ͍͏ײ͕֮େࣄʂ • ઃܭͷஈ֊ͰʮৄࡉΛ੾Γ཭͠ʯͯߟ͑΍͘͢ͳΔ 従来的な考え⽅ 新しい考え⽅ 「座標データ」が必要 で、「描画・表⽰の⼿続き」も考 える必要があるな・・・

    図形を描きたいな・・ それ⽤の描画できる何かを 作っておこう ৄࡉͱີʹͳΓ΍͍͢ ৄࡉ͸੾Γ཭͞ΕΔ ࣮૷؍఺Ά͍ ֓೦্ͷ؍఺Ά͍
  13. ΦϒδΣΫτʹର͢Δଊ͑ํͷϙΠϯτ • ৽͍͠ߟ͑ํʹΑͬͯɺʮͲ͏࣮૷͞ΕΔ͔ʯΑΓʮԿΛ࣮ߦ͢ Δͷ͔(໨త)ʯʹؔ৺ΛूதͰ͖Δ • ʮ࣮૷Ͱ͸ͳ͘ಈػʹண໨͢Δʯ͸σβύλʹසग़ͷ؍఺ • ৄࡉΑΓઌʹ༧උతͳઃܭΛߦ͑ΔΑ͏ʹͳΔ • શͯ(ৄࡉ)Λચ͍ग़͞ͳͯ͘΋ઃܭͰ͖Δ

    • “࣮૷ΛΠϯλʔϑΣʔεͷഎޙʹӅṭ͢Δ͜ͱͰɺ࣮૷ͱͦΕ Λ࢖༻͢ΔΦϒδΣΫτΛ෼཭͢Δ͜ͱʹͳΔΘ͚Ͱ͢(P106)” • ʮखଓ͖తͳߟ͑ํʯ͔ΒʮΦϒδΣΫτࢦ޲ʯ΁ʂ
  14. ʮैདྷతʯͳΧϓηϧԽͷ෺଍Γͳ͞ • ʮΧϓηϧԽͱ͸σʔλӅṭʯͰ͸ͳ͘ɾɾɾ • σʔλͷӅṭ͸ʮΧϓηϧԽͷݶΒΕͨҰ໘ʯ • ΧϓηϧԽͱ͸ʮ͋ΒΏΔ΋ͷͷӅṭʯͱଊ͑Δ΂͖ • ͜͜ͷ”ࢹ໺͕ڱ͘”ͳͬͯ͠·͏ͱɺຊ࣭͔Βԕ͔͟Δ •

    σʔλɺ࣮૷ɺ೿ੜΫϥεɺઃܭͷৄࡉɺ࣮ମԽͷنଇ etc.
  15. ͳΜͰʮσʔλͷӅṭʯ͚ͩ͡Ό෺଍ΓΜͷ͡ΌΖ • ຊॻͰΧϓηϧԽͱݴ͍ͬͯΔͷ͸ɺʮݺͼग़͠ݩʹରͯ͠Ӆṭ ͢Δʯʮ௚઀৮ΕΒΕͳ͘͢Δʯ͜ͱΛ௨ͯ͡ʮҙࣝͰ͖ͳ͘͢ Δʯͱ͍͏χϡΞϯε͕ڧ͍ؾ͕͢Δ • ͜ΕʹΑͬͯɺ࣍ͷར఺(ڧΈ)͕֫ಘ͞Εͦ͏ • ௿݁߹Խ͠΍͘͢ͳΔ •

    ʮந৅ʹରͯ͠ϓϩάϥϛϯά͠ΖʯݪଇΛୡ੒ͨ͠Γɺʮϙ ϦϞʔϑΟζϜΛ׆͔͢ʯͱ͍͏ςΫχοΫ͕࢖͍΍͘͢ͳΔ • ʮ֓೦ͷ؍఺Ͱߟ͑Δʯ্ͰɺʮΧϓηϧԽʯͷύϫʔ͕͔ܽͤ ͳ͍ʂ(ͱ͍͏ߟ͑ํͳΜ͡Όͳ͍͔ͳ͊)
  16. σʔλͷΧϓηϧԽ • ʮσʔλΛ֎෦͔ΒӅṭ͢Δʯͱ͏ͷ͸Ͳ͏΍Δ͔ʁͱ͍ ͏ͷ͸ɺΠϝʔδ͕༙͖΍͍͢ͱࢥ͍·͢ͷͰʂ • ͜͜Ͱ͸঺հΛׂѪ͠·͢

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

    - Wikipedia https://ja.wikipedia.org/wiki/リスコフの置換原則
  18. ϝιουͷΧϓηϧԽ • alignShape()͸Shape::setLocation()Λ ࣮ߦ͍ͯ͠Δ͕ɺ࣮ࡍͷॲཧ͸ Circle::setLocation()ʹͳ͍ͬͯΔ • ॏཁͳͷ͸ʮݺͼग़͠ଆ͕ɺͦͷϝιο υͷଘࡏͱ࢖͍ํΛ஌͍ͬͯΔ͜ͱʯͰ ͋Γɺ͔ͦ͜Βઌ͸ΦϒδΣΫτͷ੹೚ ͱͳΔ

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

    Έग़͞Ε·͢(P107)”
  20. ܕͷΧϓηϧԽ • $shape͕Shapeͷੑ࣭Λ࣋ͭΦϒ δΣΫτ(is-a)Ͱ͋Δ͜ͱ͸෼͔ͬͯ ͍Δ͕ɺͦͷ࣮ମ͕ԿͰ͋Δ͔ʹͭ ͍ͯ͸ؔ৺͕ͳ͍(Կ͕དྷͯ΋ಈ͘) • Circle͔΋஌Εͳ͍͠ɺ Rectangle͔΋஌Εͳ͍ɾɾɾ •

    ͜ͷΑ͏ͳʮಉؔ͡ΘΓํʯͰ΋ ʮঢ়گʹԠͯ͡ଟ༷ͳಈ͖ํΛ͢ Δʯͷ͕ϙϦϞʔϑΟζϜ
  21. ֓೦ͱͯ͠ͷܧঝvs࠶ར༻ͷͨΊͷܧঝ • ͔ͭͯܧঝʹ͍ͭͯड़΂ΒΕ͍ͯͨ͜ͱ • ίʔυͷ࠶ར༻(࿪ΜͩҙຯͰͷDRYతͳ)ͷͨΊʹɺ ʮݩʑ͋ͬͨΫϥε͔Βɺಛఆͷঢ়گʹରԠ(ಛԽ)͢΂͘ ར༻Ͱ͖Δʯͱ͍͏ํ๏ • ΑΓ֓೦తͳΞϓϩʔνํ๏ͱͯ͠ѻ͏͜ͱͰɺརӹΛੜ Ή͜ͱ͕Ͱ͖Δ͸ͣ

    • ΋ͬͱʮࢹ໺Λ޿͛ͯʯΦϒδΣΫτ΍ΧϓηϧԽɺܧ ঝΛѻ͏͜ͱͰɺ֦ுੑͷߴ͍ίʔυΛ࡞ΕΔ
  22. ࠶ར༻ͷͨΊͷܧঝͷ᠘ ʮޒ֯ܗΛಛԽ͠ɺಛघͳԑͷޒ֯ܗʯΛ࡞ͬͨྫɻ͜Ε͸࣍ͷ໰୊Λ͸ΒΉ 1. ڽूੑͷ௿Լ • ʮಛԽʯͤ͞Δࡍʹɺຊདྷͱ͸ҧ͏ྨͷ࢓ࣄΛר͖ࠐΜͰ͠·͍ͬͯΔ (ʮԑΛѻ͏ʯͱ͍͏෦෼ɻShapeͰ͸ͳ͘Pengtagonͷ࢓ࣄͰ͍͍ͷʁ) 2. ࠶ར༻ੑͷ௿Լ •

    ʮಛघͳԑʯ͚ͩΛѻ͍ͨͯ͘΋ɺʮಛघͳԑͷޒ֯ܗʯʹ͸ʮޒ֯ܗʯ ػೳ͕༊ண͍ͯ͠ΔͷͰɺ֎͔Β͸ར༻Ͱ͖ͳ͍ 3. มԽʹ௥ैͰ͖ͳ͍ • ཁٻͷมԽɾ૿େʹԠͯ͡ඞཁͳόϦΤʔγϣϯ͕૿͑ଓ͚Δ΋ͷͷɺʮಛ ԽʯͰରԠ͠Α͏ͱͨ͠৔߹ɺΫϥε͕૿͑·ͬͯ͘ݫ͘͠ͳΔ
  23. ֓೦ͱͯ͠ͷܧঝ • ”ಉ͡ৼΔ෣͍Λڞ༗͢Δ΋ͷʹண໨͠”ͬͯɺʮ࠶ར༻ͷͨ Ίͷܧঝʯͱҧ͏ͷ͔ʁ • (͜Ε͸ଟ෼8.5અΛݟͨ΄͏͕෼͔Γ΍ͦ͢͏ • ͬ͘͟Γ͍͏ͱ • ʮ۩৅ˠߋʹಛԽʯతͳͷ͕ʮ࠶ར༻ͷͨΊͷʙʯͱ͍͏

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

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

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

  27. ͪΐͬͱدΓಓ: ݪஶͩͱ͜Μͳײ͡ • ʮͲͷΑ͏ʹύλʔϯΛબ୒͢Δ ͔ʯͱ͍͏จ຺Ͱग़ͯ͘Δ • ࠶ઃܭͷݪҼʹয఺ΛߜΔ = ʮ֦ுੑɾมߋੑΛ௿Լͤ͞ΔΑ ͏ͳઃܭΛ͍ͯ͠ͳ͍͔Λ୳Δʯ

    • ٯͷΞϓϩʔν = ʮมߋ͕ൃੜ ͦ͠͏ͳՕॴΛ༧ݟ͠ɺ༧Ίઃܭ ʹ৫ΓࠐΜͰ͓͘ʯ オブジェクト指向における再利⽤のためのデザインパターン 改訂版 P41
  28. ͪΐͬͱدΓಓ: ࠶ઃܭͷݪҼ ʮ࠶ઃܭΛ༨ّͳͤ͘͞ΔݪҼʯͱͯ͠8ͭͷ఺Λྻڍ 1. Ϋϥε໊Λ໌നʹنఆͯ͠Φ ϒδΣΫτΛੜ੒͢Δ 2. ಛఆͷΦϖϨʔγϣϯ΁ͷґ ଘ 3.

    ϋʔυ΢ΣΞ΍ιϑτ΢ΣΞ ϓϥοτϑΥʔϜ΁ͷґଘ 4. ΦϒδΣΫτͷදݱ͋Δ͍͸ ࣮૷΁ͷґଘ 5. ΞϧΰϦζϜ΁ͷґଘ 6. ີͳ݁߹ 7. αϒΫϥεԽʹΑΔػೳͷ֦ ு 8. ؆୯ͳΫϥεมߋ͕ෆՄೳͰ ͋Δ͜ͱ
  29. ͋ͳͨͷઃܭʹ͓͍ͯɺԿΛྲྀಈతཁૉͱ͢Δ΂͖͔Λߟ࡯ͯ͠ ͍ͩ͘͞ɻ ͜ͷΞϓϩʔν͸ɺ࠶ઃܭͷݪҼʹண໨͢Δͱ͍͏΋ͷͱ͸ਖ਼൓ରͱͳͬͯ ͍·͢ɻઃܭมߋΛڧ͍ΔՄೳੑͷ͋Δ΋ͷ͕Կ͔Λߟ͑ΔͷͰ͸ͳ͘ɺ࠶ ઃܭͤͣʹԿΛมߋՄೳʹ͢Δͷ͔Λߟ͑ΔͷͰ͢ɻ͜͜Ͱண໨͍ͯ͠Δͷ ͸ɺྲྀಈత֓೦ͷΧϓηϧԽͰ͋Γɺଟ͘ͷσβΠϯύλʔϯͷςʔϚͱ΋ ͳ͍ͬͯΔ΋ͷͰ͢ɻ 1 “ ཁ఺Λૡ͍ఠΉͱɺ

    ʮྲྀಈతཁૉΛݟ͚ͭग़͠ɺͦΕΛΧϓηϧԽ͢Δʯͷ͕ॏཁͱ͍͏͜ͱ
  30. ྲྀಈੑ(มಈੑ)ͬͯԿʁ • ʮมΘΓͦ͏ͳ෦෼ʯͱ͍͏ͱܦ࣌తมԽͬΆ͍ʁ • ࣮ࡍʹ͸ɺೖΕସ͑ΔϞϊͰ͋Εಉ࣌ظʹଘࡏ͢ΔόϦΤʔγϣϯͰ ͋ΕʮྲྀಈੑʯͱΈͳ͢ • ྫ͑͹ɾɾɾ • ૿͑ͦ͏ͳ΋ͷ΍ݮΓͦ͏ͳ΋ͷ

    • (ઌͷྫ)ਤܗͷछྨ͕૿͑ͨɺʮࣗసंʯʹʮϩʔυόΠΫʯ͕௥Ճ • มΘΓͦ͏ͳ΋ͷ • ΞϧΰϦζϜΛม͍͑ͨɺσʔλ͕૿͖͔͑ͯͨΒετϨʔδΛม ͍͑ͨɺAPI͕ഇࢭ͞Εͨ
  31. ྲྀಈੑͱΧϓηϧԽ • ʮมԽ͠ʹ͍͘෦෼ʯͱʮྲྀಈతཁૉʯΛൃݟ͠ɺ ʮ໨త(֓೦ɾந৅)ʯ͔Β੾Γ཭ͯ͠ʮৄࡉ(࣮૷ɾ۩৅)ʯͱ۠ ผͰ͖Δͱ˕ • ྫ͑͹Facade͸ʮαϒγεςϜ(ৄࡉ)ͱ͍͏ྲྀಈੑʯΛΫϥΠ Ξϯτ(্ྲྀ)͔ΒӅṭ͢Δ΋ͷ ※ʮܕͷӅṭʹ͍ͭͯߟ͑Δ͜ͱͷҙٛʯΈ͍ͨͳͷ͸ɺ͜ͷઅͰ ཱͪࢭ·Βͣʹ࣍અ(ڞ௨ੑͱՄมੑ)Λཧղ͢Δํ͕ڞײͰ͖ͦ͏

  32. ڞ௨ੑ/Մมੑ • ڞ௨ੑ/Մมੑ෼ੳ: ڞ௨ੑͱՄมੑΛ෼ੳʹΑͬͯൃݟ͢Δ • ྲྀಈతཁૉ => Մมੑ • ඇྲྀಈతཁૉ

    => ڞ௨ੑ • ڞ௨ੑΛ͍࣋ͬͯΔཁૉ: ϑΝϛϦ • ڞ௨ੑ(ϑΝϛϦ)͸֓೦্ͷ؍఺ΛɺՄมੑ(ϑΝϛϦߏ੒һ) ͸࣮૷্ͷ؍఺ʹؔ࿈͢Δ
  33. ;Θ;Θͨ͠ྫ • ʮຯḩϥʔϝϯʯʮে༉ϥʔϝϯʯʮಲࠎϥʔϝϯʯʮਏ ຯḩϥʔϝϯʯʮւଽνϟʔγϡʔϥʔϝϯʯʮে༉ϥʔ ϝϯʯͱ͍ͬͨΦϒδΣΫτ͕ɺͱ͋ΔγεςϜͷ࣮૷ʹ ඞཁͩͬͨͱ͠·͢ • ͜ͷதͰɺʮօ͕͍࣋ͬͯΔ΋ͷʯʮօ͕͍࣋ͬͯΔ͕಺ ༰͕ҟͳΔ΋ͷʯΛߟ͑ΔͷͰ͢

  34. ;Θ;Θͨ͠ྫ • ͜ΕΒͷʮશͯʯʹؚ·ΕΔ΋ͷ͸ʁ • ໙Λ࣋ͭ • εʔϓΛ࣋ͭ • ثΛ࣋ͭ •

    τοϐϯάΛ࣋ͭ • ඒຯ͍͠ • ͜ΕΒͷʮࠩ෼͕͋Δʯ΋ͷ͸ʁ • εʔϓ • τοϐϯά
  35. ;Θ;Θͨ͠ྫ • ڞ௨ੑʹண໨ͯ͠ʮϑΝϛϦ: ϥʔϝϯʯ͕ߏ੒͞ΕΔ • ϥʔϝϯͱ͍͏֓೦͕ੜ·ΕΔ • ্ख͍͚͘͹ίϨ͸ͦͷ··ʮυϝΠϯʯʹͳΔ • ্ख͍͚͘͹ίϨ͸ͦͷ··ʮந৅(Ϋϥε)ʯʹͳΔ

    • ʮεʔϓʯʮτοϐϯάʯ͸ɺʮϝϯόͱͳΔ͕಺༰͕ҟͳ Δʯ΋ͷͰʮՄมύϥϝʔλʯͱݺ͹ΕΔ • ڞ௨ੑ͸ɺϑΝϛϦ಺ͷ͢΂ͯͷߏ੒һʹରͯ͠ʮਅʯͱͳΔ • ͜͜ΛޡΔͱʮྑ͍ந৅ԽʯʹࢸΒͳ͍
  36. ;Θ;Θͨ͠ྫ • ໙ͷߗ͞ͱ͔ྔͱ͔ҧΘͶʁͬͯ͜ͱ͸Մมੑʁ • ͦ͜Βล͕มΘͬͯ΋ে༉ϥʔϝϯ͸ে༉ϥʔϝϯͳײ͡ • Ramen::$menϝϯόʔʹMenΠϯελϯεΛ࣋ͨͤͪΌ͏ͳͲ • ͳ͓Ramenʹ໙ͷදݱΛʮ໙ͷྔʯͰ࣋ͨͤΔͱਏ͘ͳΔ •

    ৼΔ෣͍෇͖ͷΦϒδΣΫτʹ͓͚ͯ͠͹ʮϥʔϝϯυϝΠϯʯʹର͠ ͯʮ໙αϒυϝΠϯʯͷ஌ࣝΛ੾Γ཭ͤΔՄೳੑ • νϟʔγϡʔ໙͕ʮνϟʔγϡʔτοϐϯάͷে༉ϥʔϝϯʯ͔͸෼͔ΒΜ • ʮঢ়ଶʯͱͯ͠දݱ͢Δ͔ʮΦϒδΣΫτʯͱͯ͠දݱ͢Δ͔͸ઃܭ࣍ୈ • (ͦ΋ͦ΋ʮϥʔϝϯʯͰ୯Ұ(۩৅)ΫϥεͰࡁΉՄೳੑ΋͋Δ
  37. ;Θ;Θͨ͠ྫ • શͯͷϥʔϝϯͨͪ͸ʮϑΝϛϦߏ੒һʯͱͳΔ • ʮಉ͡ϑΝϛϦʯͷதͰɺߏ੒һΛݸผԽ͢Δͷ͸ʮՄมੑͷத਎ʯ • ʮεʔϓ(Մมύϥϝʔλ) = ຯḩʯͰʮ ຯḩϥʔϝϯʯΈ͍ͨͳ

    • ՄมੑʹΑͬͯɺϑΝϛϦͷதͷ͢΂ͯͷߏ੒һ͕දݱͰ͖Δ(͢΂ͯͷߏ੒һΛ໢ ཏ͢Δ)͔ʁ • ʮثʹ໙ͱεʔϓ͕ೖ͍ͬͯͯτοϐϯά͕৐͍ͬͯͯඒຯ͍͠ʯͱͨ͠Βɺ ϥʔϝϯͱݴ͑ΔʁϑΝϛϦΛఆٛ͢Δ(ͦͷϑΝϛϦͨΒ͠Ί͍ͯΔ)΋ͷ͸ʁ • ʮՄมੑͰઆ໌͕͔ͭͳ͍ߏ੒һʯ΍ʮҰ෦ͷߏ੒һͷͨΊ͚ͩͷՄมੑʯͳͲ • ِͰ͋Δ৔߹ɺޡͬͨؔ࿈෇͚(෼ྨʹಉ͡ϑΝϛϦͱΈͳ͢)͕ߦΘΕ͍ͯΔՄ ೳੑ͕͋Δ => ௿ڽू
  38. ͳͥʮ֓೦ʯతʹߟ͑΍͘͢ͳΔͷ͔ʁ • චऀͷओு • ैདྷతͳʮ໊ࢺͱಈࢺΛநग़͠ɺΦϒδΣΫτΛ࡞Δʯ ͱ͍͏Ξϓϩʔν͸ʮਂ͍Ϋϥε֊૚͕࡞ΒΕͯ͠·͍ ͕ͪʯ • ڞ௨ੑ/Մมੑʹ஫໨͢Δͱʮڞ௨͢Δ֓೦ʹ͓͚Δྲྀಈ తཁૉʯ͕ݦΕ΍͘͢ͳΔ

  39. ͳͥʮ֓೦ʯతʹߟ͑΍͘͢ͳΔͷ͔ʁ • Ͳ͜ʹมԽ͕͋Δͷ͔ʁ • CoplienͷΞϓϩʔν΋ʮ࠷ॳʹυϝΠϯࣙॻΛ࡞Δʯ͜ͱ ͔ΒೖΔͷͰɺͦ͜͸ࣅ͍ͯΔͱ΋ݴ͑Δ • ͦͷޙʹʮڞ௨ੑɾՄมੑΛݟ͚ͭΔʯͱ͍͏෼ੳ޻ఔ͕ೖ Δ఺ •

    ͜͜Ͱந৅Խ = ֓೦্ͷ؍఺͔Βͷ࠶੔ཧ͕ߦΘΕΔ • ऄ଍: ෼ੳͷࡍʹ͸ڞ௨ੑͱՄมੑ͸ʮಉ࣌ʹߟ͑Δʯͷ͕Φ εεϝ(by Coplien)
  40. ͳͥʮ֓೦ʯతʹߟ͑΍͘͢ͳΔͷ͔ʁ • ʮഅ͸૸ΓɺӉ஦ધ͸ඈͿʯͱ͍͏৘ใ͔Β • ʮ৐Γ෺͸ҠಈखஈΛ࣋ͭʯͱ͍͏ந৅ԽΛߦ͏ • ʮҠಈखஈ͸৐Γ෺ʹΑΓҟͳΔʯͱ͍͏ࠩ෼ͷఆٛΛߦ͏ • walk/flyϝιουΛఆٛ͢ΔͷͰ͸ͳ͘ɺந৅ϝιουmove͕ ൃ૝͞Εͦ͏

    • ந৅-ଟ༷ͷੈք؍ʹΞϓϩʔν͠΍͍͢ • ʮ۩৅͕ݻ༗ͷೳྗΛ࣋ͭʯͷͰ͸ͳ͘ʮந৅ͷՄมੑΛ࣋ ͭʯͱ͍͏؍఺
  41. ʮྲྀಈੑʹண໨͢Δʯ͜ͱͷϙΠϯτ • ΍Γ͍ͨ͜ͱ͸ʮมΘΓʹ͍͘෦෼ʯΛʮมΘΓ΍͍͢෦ ෼ʯ͔Βอޢ͢Δ͜ͱ • มΘΓ΍͍͢ = όϦΤʔγϣϯ͕͋Δɺ͕࣌ؒܦͭͱ෗Δ • ੾Γ཭͓ͯ͘͜͠ͱͰɺʮ࠶ઃܭ͕ඞཁͳ͍ʯίʔυΛੜ

    Έ΍͘͢ͳΔ • ʮྲྀಈੑ(Մมੑ)ʯΛʮಛԽʯͰɺʮ҆ఆͨ͠෦෼(ڞ௨ ੑ)ʯΛʮந৅ʯ΁͍࣋ͬͯ͜͏ͱ͍͏ൃ૝ • ৄࡉͳʮࠩ෼ʯΛࣺ૾ͯ͠ʮ֓೦ʯϨϕϧͰϞσϦϯά͢Δ
  42. 事前設計 vs 適応的な開発 8.6 アジャイル開発における品質

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

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

    ※͜͜Ͱݴ͍ͬͯΔͷ͸XP(ͷٕज़తϓϥΫςΟε)