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

September 30, 2021
Tweet

More Decks by hideki kinjyo

Other Decks in Programming

Transcript

  1. ͜ͷষͷΩʔϫʔυ • ΦϒδΣΫτ • ΧϓηϧԽɾӅṭ • ܧঝɾಛघԽ • ࠶ར༻ •

    ྲྀಈੑ • ڞ௨ੑ(෼ੳ) • Մมੑ(෼ੳ) • ந৅ɺ֓೦ɾ࢓༷ɾ࣮૷
  2. ൺ΂ͯΈΑ͏ ैདྷͷߟ͑ํ ޡղ ৽ͨͳߟ͑ํ ຊ࣭ ΦϒδΣΫτͱ͸ʁ ૢ࡞Λ΋ͬͨσʔλ σʔλͱৼΔ෣͍ ϝιου ͕

    ͭʹͳͬͨ΋ͷʂ ੹຿Λඋ࣮͑ͨମ ΧϓηϧԽͱ͸ʁ σʔλΛӅṭ͢Δ͜ͱʂ ͋ΒΏΔ΋ͷΛӅṭ͢Δ σʔλɺϝιουɺܕ
  3. ※ ͪΐͬͱ͓஌Βͤ ʮ੹೚Ͱߟ͑ΔͱԿ͕ྑ͍Μ͚ͩͬʁʯʹ͍ͭͯ͸1ষΛ͓ ͞Β͍ͯ͠ΈͯͶʂ • 1.5 ཁٻͷมߋʹऔΓ૊Ή • 1.6 ΦϒδΣΫτࢦ޲ύϥμΠϜ

    参考: オブジェクト指向のこころ: 第1章 / DESIGN PATTERNS EXPLAINED: chapter-1 - Speaker Deck https://speakerdeck.com/o0h/design-patterns-explained-chapter-1?slide=22
  4. ͳΜͰʮσʔλͷӅṭʯ͚ͩ͡Ό෺଍ΓΜͷ͡ΌΖ • ຊॻͰΧϓηϧԽͱݴ͍ͬͯΔͷ͸ɺʮݺͼग़͠ݩʹରͯ͠Ӆṭ ͢Δʯʮ௚઀৮ΕΒΕͳ͘͢Δʯ͜ͱΛ௨ͯ͡ʮҙࣝͰ͖ͳ͘͢ Δʯͱ͍͏χϡΞϯε͕ڧ͍ؾ͕͢Δ • ͜ΕʹΑͬͯɺ࣍ͷར఺(ڧΈ)͕֫ಘ͞Εͦ͏ • ௿݁߹Խ͠΍͘͢ͳΔ •

    ʮந৅ʹରͯ͠ϓϩάϥϛϯά͠ΖʯݪଇΛୡ੒ͨ͠Γɺʮϙ ϦϞʔϑΟζϜΛ׆͔͢ʯͱ͍͏ςΫχοΫ͕࢖͍΍͘͢ͳΔ • ʮ֓೦ͷ؍఺Ͱߟ͑Δʯ্ͰɺʮΧϓηϧԽʯͷύϫʔ͕͔ܽͤ ͳ͍ʂ(ͱ͍͏ߟ͑ํͳΜ͡Όͳ͍͔ͳ͊)
  5. ࠶ར༻ͷͨΊͷܧঝͷ᠘ ʮޒ֯ܗΛಛԽ͠ɺಛघͳԑͷޒ֯ܗʯΛ࡞ͬͨྫɻ͜Ε͸࣍ͷ໰୊Λ͸ΒΉ 1. ڽूੑͷ௿Լ • ʮಛԽʯͤ͞Δࡍʹɺຊདྷͱ͸ҧ͏ྨͷ࢓ࣄΛר͖ࠐΜͰ͠·͍ͬͯΔ (ʮԑΛѻ͏ʯͱ͍͏෦෼ɻShapeͰ͸ͳ͘Pengtagonͷ࢓ࣄͰ͍͍ͷʁ) 2. ࠶ར༻ੑͷ௿Լ •

    ʮಛघͳԑʯ͚ͩΛѻ͍ͨͯ͘΋ɺʮಛघͳԑͷޒ֯ܗʯʹ͸ʮޒ֯ܗʯ ػೳ͕༊ண͍ͯ͠ΔͷͰɺ֎͔Β͸ར༻Ͱ͖ͳ͍ 3. มԽʹ௥ैͰ͖ͳ͍ • ཁٻͷมԽɾ૿େʹԠͯ͡ඞཁͳόϦΤʔγϣϯ͕૿͑ଓ͚Δ΋ͷͷɺʮಛ ԽʯͰରԠ͠Α͏ͱͨ͠৔߹ɺΫϥε͕૿͑·ͬͯ͘ݫ͘͠ͳΔ
  6. ͪΐͬͱدΓಓ: ݪஶͩͱ͜Μͳײ͡ • ʮͲͷΑ͏ʹύλʔϯΛબ୒͢Δ ͔ʯͱ͍͏จ຺Ͱग़ͯ͘Δ • ࠶ઃܭͷݪҼʹয఺ΛߜΔ = ʮ֦ுੑɾมߋੑΛ௿Լͤ͞ΔΑ ͏ͳઃܭΛ͍ͯ͠ͳ͍͔Λ୳Δʯ

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

    ϋʔυ΢ΣΞ΍ιϑτ΢ΣΞ ϓϥοτϑΥʔϜ΁ͷґଘ 4. ΦϒδΣΫτͷදݱ͋Δ͍͸ ࣮૷΁ͷґଘ 5. ΞϧΰϦζϜ΁ͷґଘ 6. ີͳ݁߹ 7. αϒΫϥεԽʹΑΔػೳͷ֦ ு 8. ؆୯ͳΫϥεมߋ͕ෆՄೳͰ ͋Δ͜ͱ
  8. ྲྀಈੑ(มಈੑ)ͬͯԿʁ • ʮมΘΓͦ͏ͳ෦෼ʯͱ͍͏ͱܦ࣌తมԽͬΆ͍ʁ • ࣮ࡍʹ͸ɺೖΕସ͑ΔϞϊͰ͋Εಉ࣌ظʹଘࡏ͢ΔόϦΤʔγϣϯͰ ͋ΕʮྲྀಈੑʯͱΈͳ͢ • ྫ͑͹ɾɾɾ • ૿͑ͦ͏ͳ΋ͷ΍ݮΓͦ͏ͳ΋ͷ

    • (ઌͷྫ)ਤܗͷछྨ͕૿͑ͨɺʮࣗసंʯʹʮϩʔυόΠΫʯ͕௥Ճ • มΘΓͦ͏ͳ΋ͷ • ΞϧΰϦζϜΛม͍͑ͨɺσʔλ͕૿͖͔͑ͯͨΒετϨʔδΛม ͍͑ͨɺAPI͕ഇࢭ͞Εͨ
  9. ڞ௨ੑ/Մมੑ • ڞ௨ੑ/Մมੑ෼ੳ: ڞ௨ੑͱՄมੑΛ෼ੳʹΑͬͯൃݟ͢Δ • ྲྀಈతཁૉ => Մมੑ • ඇྲྀಈతཁૉ

    => ڞ௨ੑ • ڞ௨ੑΛ͍࣋ͬͯΔཁૉ: ϑΝϛϦ • ڞ௨ੑ(ϑΝϛϦ)͸֓೦্ͷ؍఺ΛɺՄมੑ(ϑΝϛϦߏ੒һ) ͸࣮૷্ͷ؍఺ʹؔ࿈͢Δ
  10. ;Θ;Θͨ͠ྫ • ͜ΕΒͷʮશͯʯʹؚ·ΕΔ΋ͷ͸ʁ • ໙Λ࣋ͭ • εʔϓΛ࣋ͭ • ثΛ࣋ͭ •

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

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

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

    • ՄมੑʹΑͬͯɺϑΝϛϦͷதͷ͢΂ͯͷߏ੒һ͕දݱͰ͖Δ(͢΂ͯͷߏ੒һΛ໢ ཏ͢Δ)͔ʁ • ʮثʹ໙ͱεʔϓ͕ೖ͍ͬͯͯτοϐϯά͕৐͍ͬͯͯඒຯ͍͠ʯͱͨ͠Βɺ ϥʔϝϯͱݴ͑ΔʁϑΝϛϦΛఆٛ͢Δ(ͦͷϑΝϛϦͨΒ͠Ί͍ͯΔ)΋ͷ͸ʁ • ʮՄมੑͰઆ໌͕͔ͭͳ͍ߏ੒һʯ΍ʮҰ෦ͷߏ੒һͷͨΊ͚ͩͷՄมੑʯͳͲ • ِͰ͋Δ৔߹ɺޡͬͨؔ࿈෇͚(෼ྨʹಉ͡ϑΝϛϦͱΈͳ͢)͕ߦΘΕ͍ͯΔՄ ೳੑ͕͋Δ => ௿ڽू
  14. ʮྲྀಈੑʹண໨͢Δʯ͜ͱͷϙΠϯτ • ΍Γ͍ͨ͜ͱ͸ʮมΘΓʹ͍͘෦෼ʯΛʮมΘΓ΍͍͢෦ ෼ʯ͔Βอޢ͢Δ͜ͱ • มΘΓ΍͍͢ = όϦΤʔγϣϯ͕͋Δɺ͕࣌ؒܦͭͱ෗Δ • ੾Γ཭͓ͯ͘͜͠ͱͰɺʮ࠶ઃܭ͕ඞཁͳ͍ʯίʔυΛੜ

    Έ΍͘͢ͳΔ • ʮྲྀಈੑ(Մมੑ)ʯΛʮಛԽʯͰɺʮ҆ఆͨ͠෦෼(ڞ௨ ੑ)ʯΛʮந৅ʯ΁͍࣋ͬͯ͜͏ͱ͍͏ൃ૝ • ৄࡉͳʮࠩ෼ʯΛࣺ૾ͯ͠ʮ֓೦ʯϨϕϧͰϞσϦϯά͢Δ