Why abstract class is evil? 〜Abstract classはなぜ邪悪か?〜

Why abstract class is evil? 〜Abstract classはなぜ邪悪か?〜

Symfony meetup kansai 第1回 https://symfony-kansai.connpass.com/event/128538/ 発表スライド

B793da271a45d149b52f507bca9f137c?s=128

Hiromi Hishida

May 22, 2019
Tweet

Transcript

  1. 8IZBCTUSBDUDMBTTJTFWJM  ந৅Ϋϥε͸ͳͥअѱ͔ʁ 4ZNGPOZNFFUVQLBOTBJ

  2. ɾ!XFC ɾϑϦʔϥϯεʢ೥͙Β͍ʣˠΧϧςοτίϛϡχέʔγϣϯζʢ೥ʣ ɾ໊ݹ԰ ɾࣇͷ฼ ɾ೔ຊ4ZNGPOZϢʔβʔձ ɾ$PEFS%PKP໊ݹ԰ॳ୅νϟϯϐΦϯʢॾࣄ৘͋ͬͯҾୀʜʣ ɾ*—1)1

  3. ɾӡ༻ܕ޿ࠂۀքΛϗϫΠτʹ͢Δ࢓૊ΈΛ࡞ͬͯ·͢ ɾ஥ؒืूதʂʢϑϧϦϞʔτɺύʔτλΠϜɺ΋ͪΖΜϑϧ λΠϜਖ਼ࣾһ΋׻ܴʣ ɾ4ZNGPOZ࢖ͬͯ·͢ʂ

  4. BCTUSBDUDMBTTͱ͸

  5. BCTUSBDUDMBTTͱ͸ w ந৅Ϋϥε w SFGTந৅ͬͯԿʁCZ!IJEFOPSJHPUP w ܧঝ͞ΕΔલఏͷϕʔεΫϥε

  6. ͜ͷτʔΫͷ໨త w BCTUSBDUDMBTTͷअѱ͞Λ஌Δ w BCTUSBDUDMBTTͷ࢖͍ํΛ஌Δ

  7. ࣄྫ

  8. ཁ݅ᶃ Ϣʔβʔ؅ཧػೳΛ࡞ͬͯ Ͷɻ৽نొ࿥ͱ৘ใߋ৽͕ཁ ΔΑɻ ߲໨͸Ϣʔβʔ໊ɾύεϫʔ υɾϝʔϧΞυϨεͶɻ

  9. ࣮૷ᶃ 4ZNGPOZΛ࢖ͬͯ࡞ͬͨ Αʂ&OUJUZ࡞ͬͯ'PSN࡞ͬ ͯίϯτϩʔϥʔͰFN QFSTJTU ͢Δ΍ͭɻ͔Μͨ ΜͩͶʂ

  10. ཁ݅ᶄ ύεϫʔυฏจอଘ͸͢͞ ͕ʹϠόΠΑɻ҉߸Խͯ͠ Ͷɻ҉߸Խํࣜ͸TIBͰ͍ ͍Αɻ

  11. ࣮૷ᶄ ΞΠΞΠαʔɻ ొ࿥ͱߋ৽྆ํͷΞΫγϣϯ ʹύεϫʔυ҉߸ԽΛॻ͍ͯ ׬੒ʂ

  12. None
  13. ͋ΕΕίϐϖͩͳʜ

  14. ϦϑΝΫλᶃ Α͠ɺొ࿥ͱߋ৽ʹ͸ڞ௨ͷ ॲཧ͕͋Δ͔Β6TFS.BOBHFS ͱ͍͏ʮαʔϏεʯʹ·ͱΊͨ ͥʂ %%%ͩͥʂྲྀߦΓͷϨΠϠʔυ ΞʔΩςΫνϟͱ΋ݴ͏͔ͳʂ

  15. None
  16. None
  17. ཁ݅ᶅ ෆਖ਼ϢʔβʔͷΞΧ΢ϯτౚ݁ Λ࡞Δ͜ͱʹͳͬͨΑɻ ౚ݁ػೳ͸ଞͷϝϯόʔ͕࣮૷ ͢Δ͔ΒɺΩϛ͸6TFSΤϯςΟ ςΟʹFOBCMFEϑϥάΛ଍͠ ͯɺ৽نొ࿥࣌ʹ0/ʹ͠ͱ͍ ͯʂ

  18. ࣮૷ᶅ ΦʔέʔΦʔέʔɻ ॲཧΛ6TFS.BOBHFSʹ·ͱΊ͓͍͔ͯͨΒɺίϯτ ϩʔϥʔ͸͍͡Βͣʹ6TFS.BOBHFS͚ͩม͑Ε͹͍ ͍͍͡ΌΜʂ%%%ͩͥʂ

  19. None
  20. ཁ݅ᶆ ِ෺ϝʔϧΞυϨεͰͷ͍ͨͣ Βొ࿥͕ଟ͍͔Βɺϝʔϧೝূ ػೳΛ௥Ճͯ͠Ͷɻ ొ࿥͚࣌ͩ͡Όͳͯ͘ߋ৽ը໘ ͔ΒϝʔϧΞυϨε͕มߋ͞Ε ͨͱ͖ʹ΋ೝূΑΖ͘͠ɻ

  21. ࣮૷ᶆ Α͠Α͠ɺ·ͨ·ͨ6TFS.BOBHFS͚ͩมߋ ͢Ε͹͍͍Μͩͳʂ ϝʔϧೝূ͸ϝʔϧΞυϨεʹมߋ͕͋ͬͨ ৔߹͚͔ͩͩΒʜ6TFS.BOBHFSIBOEMF ͷ Ҿ਺ʹʮҎલͷϝʔϧΞυϨεʯ΋౉ͦ͏ɻ ৽نొ࿥ͷ৔߹͸OVMMΛ౉ͤ͹0,ɻ

  22. None
  23. ϦϑΝΫλᶄ ͏ʔΜɻ6TFS.BOBHFSIBOEMF ͕ෳࡶʹ ͳ͖ͬͯͪΌͬͨͳʜɻ Ͱ΋ڞ௨ॲཧ͕͋Δ͔Βίϐϖίʔυʹ͢ Δͷ͸Ϡμͳɻ ͦ͏ͩʂ͜͏͍͏ͱ͖͸BCTUSBDUDMBTTʂ ΦϒδΣΫτࢦ޲ͬͯศརͩͳʙɻ

  24. None
  25. ཁ݅ᶇ ϝʔϧΞυϨεೝূͳΜ͚ͩͲɺ৽نొ ࿥ͷͱ͖ͱϝʔϧΞυϨεมߋͷͱ͖Ͱจ ໘Ϗϛϣʔʹม͑ͯ΄͍͠ΜͩΑͶɻ ৽نొ࿥ʹ΋ʮ͍ͭ΋͝ར༻͋Γ͕ͱ͏ ͍͟͝·͢ʯͬͯͳΜ͔͓͔͍͠͡Ό Μɻมߋͷͱ͖͚ͩʹͯ͠Αɻ

  26. ࣮૷ᶇ ͏ʔΜɺมߋͷ৔߹͚͔ͩɻ "CTUSBDU6TFS.BOBHFSIBOEMF ͷϝʔϧೝ ূ૊Έཱͯ෦෼ʹ JG VTFSHFU*E \ NBJM1BSBN<bTIPX@HSFFUJOH`>USVF ^

    ͘ɺ͍ۤ͠ʜɻ
  27. ϦϑΝΫλᶅ ࢥ͍੾ͬͯ"CTUSBDU6TFS.BOBHFSΛ΍Ί ͨʂ ڞ௨෦෼͸1BTTXPSE&ODPEFSͱ $POpSNBUJPO.BJM4FOEFSͱͯ͠நग़͠Α ͏ʂ

  28. None
  29. None
  30. ϦϑΝΫλᶅ

  31. ΋͠΋ʜ w ཁ݅ᶈ"ʜϢʔβʔ͝ͱͷϝʔϧΞυϨεมߋͷճ਺਺͑ ͓͍ͯͯɻ w ཁ݅ᶈ#ʜ৽نొ࿥࣌ʹ*1ΞυϨε΋อଘͰ͖Δʁ w ཁ݅ᶈ$ʜύεϫʔυมߋ࣌͸มߋ೔࣌΋อଘ͍ͨ͠ͳɻ

  32. ࠷ॳ͔ΒϦϑΝΫλᶅͷ࣮૷Λ࡞Δʹ͸ɺ Ͳͷ࣌఺͕λʔχϯάϙΠϯτ͔ͩͬͨʁ

  33. ࠷ॳ͔ΒϦϑΝΫλᶅͷ࣮૷Λ࡞Δʹ͸ɺ Ͳͷ࣌఺͕λʔχϯάϙΠϯτ͔ͩͬͨʁ w ͦ΋ͦ΋6TFS.BOBHFSʮϢʔβʔ؅ཧʯͷओޠ͕େ͖͗ͨ͢ ʢϦϑΝΫλᶃʣ w ࠷ॳʹόϦΤʔγϣϯ͕ൃੜͨ͠ͱ͖ʢཁ݅ᶅʣ w ʮૣ͗͢Δ࠷దԽʯͱݴΘΕΔ͔΋͠Ε·ͤΜ͕ݸਓతʹ͸ ίί΋ո͍͠

    w ڞ௨෦෼Λ"CTUSBDU6TFS.BOBHFSʹ·ͱΊͪΌͬͨͱ͖ʢϦ ϑΝΫλᶄʣ w Α͏΍͘ຊ୊ ??
  34. ڞ௨ॲཧ͕͋Δˠ"CTUSBDUDMBTTͰڞ௨Խ

  35. ڞ௨ॲཧ͕͋Δˠ"CTUSBDUDMBTTͰڞ௨Խ ˞ͦ͏ࢥ͍ͬͯͨࠒ͕ࢲʹ΋͋Γ·ͨ͠ʜɻʙ೥લ͔ͳʜɻ

  36. ڞ௨ॲཧ͕͋ΔˠผΫϥεʹग़͢

  37. ڞ௨ॲཧ͕͋ΔˠผΫϥεʹग़͢

  38. Ͱ͸ɺBCTUSBDUDMBTTͬͯԿ ͷͨΊʹଘࡏ͢Δͷʁ

  39. None
  40. w BCTUSBDUDMBTT͸༻๏༻ྔΛकͬͯਖ਼͘͠࢖͍·͠ΐ͏ɻཚ ༻μϝθολΠɻ w தͰ৚݅෼ذ͢ΔBCTUSBDUDMBTTΛ࡞ͬͯ͠·͍͕ͪͳਓ ͸ɺʮڞ௨ॲཧ͕͋Δ͔ΒBCTUSBDUDMBTTΛ࡞Ζ͏ʂʯͱ ࢥͬͨͱ͖ɺཱͪࢭ·ͬͯϗϯτʹͦΕͰ͍͍͔ߟ͑Α͏ w ୯ʹʮڞ௨ॲཧ͕͋Δʯ͚ͩͳΒผΫϥεΛ࡞ͬͨΓ USBJUͷར༻Ͱे෼ͳ৔߹͕େ൒

    w ਖ਼௚ɺ൚༻తͳϥΠϒϥϦͰͳ͘ΞϓϦΛ࡞͍ͬͯΔ։ൃऀ ʹBCTUSBDUDMBTT͕ඞཁͳέʔε͸͋·Γͳ͍ؾ͕͍ͯ͠Δ
  41. 5IBOLZPV