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

- Rでオブジェクト指向プログラミング- クラス設計入門の入門

yu_sekiya
January 21, 2023

- Rでオブジェクト指向プログラミング- クラス設計入門の入門

TokyoR#103応用セッションの資料です。

yu_sekiya

January 21, 2023
Tweet

More Decks by yu_sekiya

Other Decks in Technology

Transcript

  1. Ԡ༻ηογϣϯ 3ͰΦϒδΣΫτࢦ޲ϓϩάϥϛϯά Ϋϥεઃܭೖ໳ͷೖ໳ 5PLZP3 !LPUBUZBNUFNB

  2. ࣗݾ঺հ 5XJUUFS*%!LPUBUZBNUFNB େֶͰͷઐ໳ߦಈੜଶֶ ཱҊdั֫d࣮ݧd෼ੳ·ͰϫϯΦϖ ࠓ·Ͱ٬ઌ΅ͬͪ෼ੳ԰ˠΞύϨϧ௨ൢձࣾ ݱࡏҩྍݕࠪձࣾ 3ྺ೥ա͔͗ͨ΋ʁӬԕͷॳ৺ऀ ۙگͳΜ͔ͪΐͬͱ͍Ζ͍ΖมԽ͕͠ΜͲ͍ ɹɹࠓ೔͜ͷࠒɻ ࣗ༝ͱ͕࣌ؒཉ͍͠ɺ͋ͱࢿۚҰԯԁ͘Β͍

  3. ࠷ۙͷ͓࢓ࣄ ൒୺ͳ։ൃҊ݅ ϑϩʔਤ΋ઃܭॻ΋ͳΜ΋ͳ͍·· ίʔυ͚ͩདྷΔͱ͔ͳΜͳͷ͞ ౖ  ͳΜͰ1ZUIPOͰ։ൃͯ͠Δͷʹ Ϋϥεઃܭͯ͠ͳ͍ͷ͞ʁ

  4. ͦ΋ͦ΋Ϋϥεͬͯ ͳΜͩΖ͏ʁ

  5. ໨త ΦϒδΣΫτࢦ޲ϓϩάϥϛϯάͱ͸ ʙΫϥεͱ͸ͳΜͳͷ͔ʙ 3ͰΦϒδΣΫτࢦ޲ϓϩάϥϛϯά Ϋϥε࡞੒

  6. ໨࣍  ΦϒδΣΫτࢦ޲ϓϩάϥϛϯάͱ͸  Ϋϥεͱ͸ʙϓϩάϥϜͷઃܭਤͷ࠷খ୯Ґ  ΫϥεΛ࢖͏͝རӹ  3ͷΫϥεʙ3ೖ໳ͷೖ໳

  7. ΦϒδΣΫτࢦ޲ϓϩάϥϛϯάͱ͸ ΦϒδΣΫτࢦ޲ϓϩάϥϛϯάͱ͸ ʮ͋Δ໾ׂΛ࣋ͬͨϞϊʯ͝ͱʹΫϥεʢϓϩάϥϜશମͷ ઃܭਤʣΛ෼ׂ͠ɺϞϊͱϞϊͱͷؔ܎ੑΛఆ͍ٛͯ͘͜͠ ͱͰγεςϜΛ࡞Γ্͛Α͏ͱ͢ΔγεςϜߏ੒ͷߟ͑ํ IUUQTSPCPEPOFDPNCMPH[email protected]@PSJFOUFE ୅දతͳݴޠɿQZUIPOɺKBWBTDSJQUɺ$ ɺ$

  8. Ϋϥεͱ͸ʙϓϩάϥϜͷઃܭਤͷ࠷খ୯Ґ Ϋϥεͱ͸ɿσʔλͱϝιουͷू߹ ʙΦϒδΣΫτͷઃܭਤʹ͋ͨΔ΋ͷ ཧղͷͨΊʹඞཁͳ༻ޠͱఆٛ  ΠϯελϯεɿΫϥεΛݩʹ࡞ΒΕͨ΋ͷɺ࣮ମʹ͢Δ ͜ͱΛΠϯελϯεԽͱදݱɺΦϒδΣΫτͱ΄΅ಉٛ  ϝιουɿΫϥεʹఆٛ͞Εͨॲཧ΍ಈ࡞ͷ͜ͱɺ3Ͱ͸ ؔ਺ͱಉٛ

     ϓϩύςΟɿΠϯελϯεʹ͍ͭͯͷ৘ใɺଐੑɺσʔλ ΋ؚ·ΕΔ  ΦϒδΣΫτɿʮର৅ʯʮϞϊʯͱ͍͏ҙຯͰɺσʔλ ʢϓϩύςΟʣͱϝιουʢΫϥεʹఆٛ͞Εͨॲཧʣͷ ू·ΓɺΠϯελϯεͱ΄΅ಉٛ IUUQTXFCDBNQJPNBHB[JOFBSDIJWFT
  9. ΫϥεΛ࢖͏͝རӹ ΫϥεΛ࢖͏͝རӹ  ڞ௨͢Δ಺༰ͷίʔυΛ·ͱΊΔ͜ͱ͕Ͱ͖Δ ʙػೳ͝ͱʹΫϥεΛ·ͱΊΔ͜ͱͰݟ௨͕͠ྑ͘ͳΔ  ಉ͡಺༰͸ΫϥεΛ࢖͍ճ͢͜ͱ͕Ͱ͖Δ ʙΫϥεΛܧঝ͢Δ͜ͱͰಉ͜͡ͱΛ܁Γฦ͠ॻ͔ͳͯ͘ྑ͍ɺɹ ɹػೳ௥Ճ͕؆୯ʹͳΔ 

    σόοά΍վम͕͠΍͘͢อक؅ཧίετΛԼ͛Δ ʙػೳ͝ͱʹ·ͱ·͍ͬͯΔͷͰมߋՕॴ͕গͳ͍  ෳ਺ਓͰ։ൃ͢Δͱ͖ʹศར ʙΫϥεؒͰͷׯব͕গͳ͍ͷͰΫϥε͝ͱʹ෼͚ͯ։ൃ͕Ͱ͖Δ ௕ظؒվम͠࢖͏ɺن໛͕େ͖͍ɺෳ਺ਓͰ։ൃ͢Δ ͍ͣΕ͔ͷཁૉ͕͋Δ։ൃ͸ΫϥεΛ࢖ͬͨઃܭ͕ศར
  10. 3ͷΫϥεʙ3ೖ໳ͷೖ໳ 3ͰΦϒδΣΫτࢦ޲ϓϩάϥϛϯά ʙ3͸΋ͱ΋ͱؔ਺ܕݴޠ ɹؔ਺ʹϝιου ɹΫϥεʹϝιουͱσʔλͷू·Γ 3Ͱ΋ΦϒδΣΫτࢦ޲తॻ͖ํ͕Ͱ͖Δ 3ͷΫϥε͸̏ͭɿࠓճ͸3Λ࢖ͬͯΫϥεΛ࡞੒ Ϋϥε ಛ௃ 4

    ຊ࣭తʹΦϒδΣΫτͷΫϥεଐੑ DMBTTBUSJCVUF จࣈྻɻ࠷ॳʹΫϥεΛఆٛͨ͠Γ ͤͣɺΦϒδΣΫτΛੜ੒͠ɺޙ͔ΒଐੑΛϖλϖλష͍ͬͯ͘Πϝʔδɻ݁ߏద౰ 4 4ΑΓ΋ຊ֨తʹΦϒδΣΫτࢦ޲ɻ Ϋϥεؚ͕Ή΂͖σʔλͰ͋Δεϩοτ TMPU ͱͦͷܕ UZQF ͕໌ࣔతʹදݱ SFQSFTFOUBUJPO ͞ΕɺҟͳͬͨܕͷσʔλΛؚ·ͳ͍Α͏ʹνΣοΫػೳ͕ಇ͘ 3 ΑΓࣗવͳΦϒδΣΫτࢦ޲ɺ3ύοέʔδΛΠϯετʔϧͯ͠࢖͏ QBCMJDϝϯόͱQSJWBUFϝϯό͕͋Δ ΫϥεΛ·͍ͨͰಈ࡞͢ΔܧঝʢεʔύʔΫϥεʣ͕Ͱ͖Δ
  11. 3ͷΫϥεʙ3ೖ໳ͷೖ໳ 3Λ࢖ͬͯʮྑ͍ίʔυѱ͍ίʔυͰֶͿઃܭೖ໳ʯͷ࠷ॳʹ ग़ͯ͘ΔήʔϜγεςϜͷ)1؅ཧΫϥεΛ࣮૷ͯ͠ΈΔ IUUQTHJIZPKQCPPL Ϋϥεͷ಺༰ɾ৚݅ QͷώοτϙΠϯτ )1 Λදݱ͢ΔΫϥε ܭࢉ͍ͨ͜͠ͱɿώοτϙΠϯτͷݮগɺώοτϙΠϯτͷճ෮ ೖྗ஋ɿ࠷ॳͷώοτϙΠϯτɺड͚ͨ߈ܸͷ஋ɺճ෮͞Εͨ஋

     ৚݅ɿ͢΂ͯͷ஋͸࣮਺ ώοτϙΠϯτ )1 ͷൣғ)1 ड͚ͨ߈ܸͷ஋ ճ෮͞Εͨ஋
  12. 3ͷΫϥεʙ3ೖ໳ͷೖ໳ )JUQPJOU3$MBTT )JUQPJOU  QVCMJDMJTU  JOJUJBM)1/"  JOJUJBMJ[FGVODUJPO JOJUJBM)1

    \ TUPQJGOPU JTOVNFSJD JOJUJBM)1 MFOHUI JOJUJBM)1  JOJUJBM)1JOJUJBM)1  TFMGJOJUJBM)1JOJUJBM)1 ^  μϝʔδΛड͚ͨͱ͖ͷܭࢉ )1EBNBHFGVODUJPO EBNBHF"NPVOU \ TUPQJGOPU JTOVNFSJD EBNBHF"NPVOU MFOHUI EBNBHF"NPVOU  EBNBHF"NPVOU  /FX)1TFMGJOJUJBM)1EBNBHF"NPVOU /FX)1JGFMTF /FX)1  /FX)1  DBU ࢒Γ)1͸ /FX)1 Ͱ͢  ^  ճ෮Λड͚ͨͱ͖ͷܭࢉ )1SFDPWFSGVODUJPO SFDPWFSZ"NPVOU \ TUPQJGOPU JTOVNFSJD SFDPWFSZ"NPVOU MFOHUI SFDPWFSZ"NPVOU  SFDPWFSZ"NPVOU  /FX)1TFMGJOJUJBM)1 SFDPWFSZ"NPVOU /FX)1JGFMTF /FX)1  /FX)1  DBU ࢒Γ)1͸ /FX)1 Ͱ͢  ^ 
  13. 3ͷΫϥεʙ3ೖ໳ͷೖ໳ )JUQPJOU3$MBTT )JUQPJOU  QVCMJDMJTU  JOJUJBM)1/"  JOJUJBMJ[FGVODUJPO JOJUJBM)1

    \ TUPQJGOPU JTOVNFSJD JOJUJBM)1 MFOHUI JOJUJBM)1  JOJUJBM)1JOJUJBM)1  TFMGJOJUJBM)1JOJUJBM)1 ^  μϝʔδΛड͚ͨͱ͖ͷܭࢉ )1EBNBHFGVODUJPO EBNBHF"NPVOU \ TUPQJGOPU JTOVNFSJD EBNBHF"NPVOU MFOHUI EBNBHF"NPVOU  EBNBHF"NPVOU  /FX)1TFMGJOJUJBM)1EBNBHF"NPVOU /FX)1JGFMTF /FX)1  /FX)1  DBU ࢒Γ)1͸ /FX)1 Ͱ͢  ^  ճ෮Λड͚ͨͱ͖ͷܭࢉ )1SFDPWFSGVODUJPO SFDPWFSZ"NPVOU \ TUPQJGOPU JTOVNFSJD SFDPWFSZ"NPVOU MFOHUI SFDPWFSZ"NPVOU  SFDPWFSZ"NPVOU  /FX)1TFMGJOJUJBM)1 SFDPWFSZ"NPVOU /FX)1JGFMTF /FX)1  /FX)1  DBU ࢒Γ)1͸ /FX)1 Ͱ͢  ^  ΫϥεͷॳظԽϝιου )1EBNBHFϝιου )1SFDPWFSϝιου
  14. 3ͷΫϥεʙ3ೖ໳ͷೖ໳ )JUQPJOU3$MBTT )JUQPJOU  QVCMJDMJTU  JOJUJBM)1/"  JOJUJBMJ[FGVODUJPO JOJUJBM)1

    \ TUPQJGOPU JTOVNFSJD JOJUJBM)1 MFOHUI JOJUJBM)1  JOJUJBM)1JOJUJBM)1  TFMGJOJUJBM)1JOJUJBM)1 ^  μϝʔδΛड͚ͨͱ͖ͷܭࢉ )1EBNBHFGVODUJPO EBNBHF"NPVOU \ TUPQJGOPU JTOVNFSJD EBNBHF"NPVOU MFOHUI EBNBHF"NPVOU  EBNBHF"NPVOU  /FX)1TFMGJOJUJBM)1EBNBHF"NPVOU /FX)1JGFMTF /FX)1  /FX)1  DBU ࢒Γ)1͸ /FX)1 Ͱ͢  ^  ճ෮Λड͚ͨͱ͖ͷܭࢉ )1SFDPWFSGVODUJPO SFDPWFSZ"NPVOU \ TUPQJGOPU JTOVNFSJD SFDPWFSZ"NPVOU MFOHUI SFDPWFSZ"NPVOU  SFDPWFSZ"NPVOU  /FX)1TFMGJOJUJBM)1 SFDPWFSZ"NPVOU /FX)1JGFMTF /FX)1  /FX)1  DBU ࢒Γ)1͸ /FX)1 Ͱ͢  ^  ΫϥεͷॳظԽ 3ͷ৔߹ɿ`JOJUJBMJ[F`ʹGVODUJPOͱͯ͠ࢦఆ ಛ௃  Πϯελϯε࡞੒࣌ʹࣗಈతʹҰ౓͚ͩݺ͹ΕΔɻ  ॳظԽϝιουʹҾ਺͕͋Δ৔߹͸ɺΠϯελϯε࡞੒࣌ʹҾ਺Λઃఆ͢Δඞཁ͕͋Δɻ ͝རӹ  ϝιουͷ࣮ߦ๨ΕΛ๷͛Δɻ  Πϯελϯε࡞੒͔࣌͠࢖Θͳ͍͜ͱ͕໌֬ʹͳΔɻ  Πϯελϯεม਺΁ͷ஋ͷઃఆΛڧ੍Ͱ͖Δɻ ΫϥεͷॳظԽϝιου
  15. 3ͷΫϥεʙ3ೖ໳ͷೖ໳ )JUQPJOU3$MBTT )JUQPJOU  QVCMJDMJTU  JOJUJBM)1/"  JOJUJBMJ[FGVODUJPO JOJUJBM)1

    \ TUPQJGOPU JTOVNFSJD JOJUJBM)1 MFOHUI JOJUJBM)1  JOJUJBM)1JOJUJBM)1  TFMGJOJUJBM)1JOJUJBM)1 ^  μϝʔδΛड͚ͨͱ͖ͷܭࢉ )1EBNBHFGVODUJPO EBNBHF"NPVOU \ TUPQJGOPU JTOVNFSJD EBNBHF"NPVOU MFOHUI EBNBHF"NPVOU  EBNBHF"NPVOU  /FX)1TFMGJOJUJBM)1EBNBHF"NPVOU /FX)1JGFMTF /FX)1  /FX)1  DBU ࢒Γ)1͸ /FX)1 Ͱ͢  ^  ճ෮Λड͚ͨͱ͖ͷܭࢉ )1SFDPWFSGVODUJPO SFDPWFSZ"NPVOU \ TUPQJGOPU JTOVNFSJD SFDPWFSZ"NPVOU MFOHUI SFDPWFSZ"NPVOU  SFDPWFSZ"NPVOU  /FX)1TFMGJOJUJBM)1 SFDPWFSZ"NPVOU /FX)1JGFMTF /FX)1  /FX)1  DBU ࢒Γ)1͸ /FX)1 Ͱ͢  ^  )1EBNBHFϝιου TUPQJGOPUͰEBNBHF"NPVOUϓϩύςΟͷ৚݅ઃఆ JOJUJBMJ[FϝιουͰઃఆͨ͠TFMGJOJUJBM)1Λݺͼग़͠ ΫϥεͷॳظԽϝιου
  16. 3ͷΫϥεʙ3ೖ໳ͷೖ໳ )JUQPJOU3$MBTT )JUQPJOU  QVCMJDMJTU  JOJUJBM)1/"  JOJUJBMJ[FGVODUJPO JOJUJBM)1

    \ TUPQJGOPU JTOVNFSJD JOJUJBM)1 MFOHUI JOJUJBM)1  JOJUJBM)1JOJUJBM)1  TFMGJOJUJBM)1JOJUJBM)1 ^  μϝʔδΛड͚ͨͱ͖ͷܭࢉ )1EBNBHFGVODUJPO EBNBHF"NPVOU \ TUPQJGOPU JTOVNFSJD EBNBHF"NPVOU MFOHUI EBNBHF"NPVOU  EBNBHF"NPVOU  /FX)1TFMGJOJUJBM)1EBNBHF"NPVOU /FX)1JGFMTF /FX)1  /FX)1  DBU ࢒Γ)1͸ /FX)1 Ͱ͢  ^  ճ෮Λड͚ͨͱ͖ͷܭࢉ )1SFDPWFSGVODUJPO SFDPWFSZ"NPVOU \ TUPQJGOPU JTOVNFSJD SFDPWFSZ"NPVOU MFOHUI SFDPWFSZ"NPVOU  SFDPWFSZ"NPVOU  /FX)1TFMGJOJUJBM)1 SFDPWFSZ"NPVOU /FX)1JGFMTF /FX)1  /FX)1  DBU ࢒Γ)1͸ /FX)1 Ͱ͢  ^  TUPQJGOPUͰSFDPWFSZ"NPVOUϓϩύςΟͷ৚݅ઃఆ JOJUJBMJ[FϝιουͰઃఆͨ͠TFMGJOJUJBM)1Λݺͼग़͠ )1SFDPWFSϝιου ΫϥεͷॳظԽϝιου
  17. 3ͷΫϥεʙ3ೖ໳ͷೖ໳ )JUQPJOU3$MBTT )JUQPJOU  QVCMJDMJTU  JOJUJBM)1/"  JOJUJBMJ[FGVODUJPO JOJUJBM)1

    \ TUPQJGOPU JTOVNFSJD JOJUJBM)1 MFOHUI JOJUJBM)1  JOJUJBM)1JOJUJBM)1  TFMGJOJUJBM)1JOJUJBM)1 ^  μϝʔδΛड͚ͨͱ͖ͷܭࢉ )1EBNBHFGVODUJPO EBNBHF"NPVOU \ TUPQJGOPU JTOVNFSJD EBNBHF"NPVOU MFOHUI EBNBHF"NPVOU  EBNBHF"NPVOU  /FX)1TFMGJOJUJBM)1EBNBHF"NPVOU /FX)1JGFMTF /FX)1  /FX)1  DBU ࢒Γ)1͸ /FX)1 Ͱ͢  ^  ճ෮Λड͚ͨͱ͖ͷܭࢉ )1SFDPWFSGVODUJPO SFDPWFSZ"NPVOU \ TUPQJGOPU JTOVNFSJD SFDPWFSZ"NPVOU MFOHUI SFDPWFSZ"NPVOU  SFDPWFSZ"NPVOU  /FX)1TFMGJOJUJBM)1 SFDPWFSZ"NPVOU /FX)1JGFMTF /FX)1  /FX)1  DBU ࢒Γ)1͸ /FX)1 Ͱ͢  ^  Ϋϥεͷ͝རӹ )1EBNBHFϝιουͱ)1SFDPWFSϝιουͷ྆ํͰ ڞ௨ͯ͠࢖͏JOJUJBM)1ϓϩύςΟͷఆ͕ٛճͷهࡌͰࡁΉ ڞ௨͢Δ߲໨ΛҰ౓ʹݟΒΕΔͷͰվम΍σόοά͕ ΍Γ΍͍͢
  18. 3ͷΫϥεʙ3ೖ໳ͷೖ໳ UFTU)Q)JUQPJOUOFX  UFTU)Q)JUQPJOUOFX   &SSPSJOJOJUJBMJ[F  JOJUJBM)1JOJUJBM)1JTOPU536& UFTU)Q)JUQPJOUOFX

      &SSPSJOJOJUJBMJ[F  JOJUJBM)1JOJUJBM)1JTOPU536& ΦϒδΣΫτΛੜ੒ ࢦఆͨ͠ൣғΛ௒͑ͨ৔߹
  19. 3ͷΫϥεʙ3ೖ໳ͷೖ໳ UFTU)Q)1EBNBHF   ࢒Γ)1͸Ͱ͢ UFTU)Q)1EBNBHF   ࢒Γ)1͸Ͱ͢ μϝʔδΛड͚ͨ৔߹ͷܭࢉ

    ࠷ॳͷ)1ΑΓখ͞ͳμϝʔδ ࠷ॳͷ)1ΑΓେ͖ͳμϝʔδ
  20. 3ͷΫϥεʙ3ೖ໳ͷೖ໳ UFTU)Q)1SFDPWFS   ࢒Γ)1͸Ͱ͢ UFTU)Q)1SFDPWFS   ࢒Γ)1͸Ͱ͢ ճ෮ͨ͠৔߹ͷܭࢉ

    ࠷େ஋ΑΓগͳ͍ճ෮ ࠷େ஋ΑΓଟ͍ճ෮
  21. 3ͷΫϥεʙ3ೖ໳ͷೖ໳ ࠓճग़དྷͨ͜ͱ ɾ3Λ࢖ͬͯ؆୯ͳΫϥεΛ࣮૷ͯ͠ڍಈΛ֬ೝͨ͠ ·ͩग़དྷ͍ͯͳ͍͜ͱ ɾQSJWBUFͷڍಈΛࢼ͢ ɾܧঝͷڍಈΛࢼ͢ ɾ3ಛ༗ͷڍಈͷ֬ೝ

  22. ·ͱΊ w ΫϥεͱΦϒδΣΫτࢦ޲ϓϩάϥϛϯάͷ঺հ w 3ύοέʔδΛ࢖ͬͯΫϥεΛ࡞੒ͯ͠Έͨ w ·ͩ·ͩΫϥεઃܭʹ΋3ʹ΋ཧղ͕ઙ͍ͷͰ ͍Ζ͍Ζࢼ͢ 3Ͱ΋ΦϒδΣΫτࢦ޲ϓϩάϥϛϯάత ։ൃ͕Ͱ͖Δ

  23. ࢀߟࢿྉ ɾ"EWBODFE3ষ IUUQTBEWSIBEMFZO[SIUNM ɾʦ຋༁ʧ3WJHOFUUF3Ϋϥεೖ໳ IUUQTRJJUBDPNOBLBNJDIJJUFNTEFGEBD ɾ3DMBTTͬͦ͘͞ௐࠪSTUBUTK IUUQTRJJUBDPN[email protected]JUFNTCCGGCFBB

  24. &/+0: