Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
オブジェクト指向プログラミングについて調べてみた
Search
yn2011
August 31, 2018
Programming
0
220
オブジェクト指向プログラミングについて調べてみた
オブジェクト指向プログラミングとは何か/その歴史と価値について
yn2011
August 31, 2018
Tweet
Share
More Decks by yn2011
See All by yn2011
シェル芸入門
yn2011
1
830
UTF-8入門
yn2011
0
150
初心者系エンジニアにおすすめの技術書3冊
yn2011
0
190
Other Decks in Programming
See All in Programming
try!Swift Tokyo 2024 参加報告 LT
akidon0000
1
190
甘い香りに誘われてVanilla Extractを1年間運用してみた
miyahkun
1
110
Changed Rules: Architectures with Lightweight Stores
manfredsteyer
PRO
0
230
Netty Chicago Java User Group 2024-04-17
sullis
0
130
Blue/Greenデプロイの導入による 運用フローの改善
kudoas
1
350
デザインシステムで Tailwind CSSとCSS in JSに分散投資をしたら良かった話
fsubal
18
4.8k
スクラムチームと認知負荷 - ニフティのスクラムトーク Vol2. / NIFTY Tech Talk #18
niftycorp
PRO
1
120
Hanami and htmx
bkuhlmann
0
190
⼤規模⾔語モデルの拡張(RAG)が 終わったかも知れない件について
nearme_tech
22
15k
From Spring Boot 2 to Spring Boot 3 with Java 21 and Jakarta EE
ivargrimstad
0
1.1k
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
25
7.8k
Ruby Pattern Matching
bkuhlmann
0
920
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
688
190k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
104
6.6k
Git: the NoSQL Database
bkeepers
PRO
422
63k
A better future with KSS
kneath
231
16k
Side Projects
sachag
451
41k
Why Our Code Smells
bkeepers
PRO
331
56k
KATA
mclloyd
14
12k
Designing the Hi-DPI Web
ddemaree
276
33k
Web development in the modern age
philhawksworth
202
10k
4 Signs Your Business is Dying
shpigford
175
21k
It's Worth the Effort
3n
180
27k
Become a Pro
speakerdeck
PRO
10
4.5k
Transcript
ΦϒδΣΫτࢦ ϓϩάϥϛϯάʹ͍ͭͯ ௐͯΈͨ @yn2011 2018/8/31 TeamSpirit Inc
ࣗݾհ • ͦΖͦΖΤϯδχΞ3? • ৽ଔSE(1)→ݱ৬(1)ɹ͍·͜͜ • ࣄ • ϑϩϯτ(ES5) /
όοΫΤϯυ(Salesforce/Node.js) = (6:4?) • Twitter(@yn2011) / blog
ҙࣄ߲ • ͜ͷεϥΠυͷ༰ • ࣗͷݟղͱ͍͏ΑΓௐࠪͯ͠ཧղͨ͠༰ͷ·ͱΊ • ΦϒδΣΫτࢦϓϩάϥϛϯάʹରͯ͠தཱͳཱ͔Β ࡞ͨͭ͠Γ • ࢲͷΦϒδΣΫτࢦϓϩάϥϛϯάʹର͢ΔײແͰ͢
ͳͥࠓߋ ΦϒδΣΫτࢦ ϓϩάϥϛϯά ʹ͍ͭͯௐͨʁ
“ΦϒδΣΫτࢦϓϩάϥϛϯά” ͱ͍͏ݴ༿ʹର͢Δٙ೦ • ݴ༿ͷఆٛͱཧղͷᐆດ͞ • ਓͦΕͧΕͷղऍ • ᐆດͳఆٛͱཧղʹجͮ͘൷ٞ • e.g.
ΦϒδΣΫτࢦ vs ؔࢦɺΦϒδΣΫτࢦΦ ϫίϯ
“ΦϒδΣΫτࢦϓϩάϥϛϯά” ͱ͍͏ݴ༿ʹର͢Δٙ೦ • ݴ༿ͷఆٛͱཧղͷᐆດ͞ • ਓͦΕͧΕͷղऍ • ᐆດͳఆٛͱཧղʹجͮ͘൷ٞ • e.g.
ΦϒδΣΫτࢦ vs ؔࢦɺΦϒδΣΫτࢦΦ ϫίϯ ঢ়گΛཧ͍ͨ͠
ΦϒδΣΫτࢦ ϓϩάϥϛϯάʹ͍ͭͯ ਖ਼͘͠ਓʹઆ໌ग़དྷ·͔͢ʁ
ΦϒδΣΫτࢦϓϩάϥϛϯά ϓϩάϥϛϯάͷύϥμΠϜͷ1ͭ • ϓϩάϥϛϯάͷύϥμΠϜͱ • ϓϩάϥϛϯάͷߟ͑ํɾํ๏ • 40Ҏ্৽͍͠ύϥμΠϜొ͍ͯ͠ͳ͍ ߏԽ ϓϩάϥϛϯά
ؔܕ ϓϩάϥϛϯά 1958(Lisp) 1960લ(Simula) 1960ޙ(ఏএ) δϣϯɾϚοΧʔγʔ ΦʔϨʹϤϋϯɾμʔϧ ΫϦεςϯɾχΰʔϧ ΤυΨʔɾμΠΫετϥ ύϥμΠϜൃݟ(࣮ͷొ)ͷ࣌ܥྻ ΦϒδΣΫτࢦ ϓϩάϥϛϯά
ύϥμΠϜʹ͍ͭͯ ਖ਼͘͠ཧղ͢ΔͨΊʹ ྺ࢙ΛΔඞཁ͕͋Δ
ΦϒδΣΫτࢦϓϩάϥϛϯάͷܥේ Simula ΦϒδΣΫτͱ ϝοηʔδ நσʔλܕ ૪ͷ࣠
ΦϒδΣΫτࢦϓϩάϥϛϯάͷܥේ Simula ΦϒδΣΫτͱ ϝοηʔδ நσʔλܕ ૪ͷ࣠ C SmallTalk C++ ߏԽϓϩάϥϛϯά
ΦϒδΣΫτࢦϓϩάϥϛϯάͷܥේ Simula Java Ruby ΦϒδΣΫτͱ ϝοηʔδ நσʔλܕ ૪ͷ࣠ C SmallTalk
C++ ߏԽϓϩάϥϛϯά
ΦϒδΣΫτࢦϓϩάϥϛϯάͷܥේ Simula Java Ruby ΦϒδΣΫτͱ ϝοηʔδ நσʔλܕ ૪ͷ࣠ C SmallTalk
C++ ߏԽϓϩάϥϛϯά Apex
ΦϒδΣΫτࢦϓϩάϥϛϯάͷܥේ Simula Java Ruby ΦϒδΣΫτͱ ϝοηʔδ நσʔλܕ ૪ͷ࣠ C SmallTalk
C++ ߏԽϓϩάϥϛϯά
ΦϒδΣΫτࢦϓϩάϥϛϯάͷىݯ Simula • 1967 ɺίϯϐϡʔλγϛϡϨʔγϣϯͷͨΊͷݴޠͱ͠ ͯ։ൃ͞Εͨ(Simulation Language) • ࣌ΦϒδΣΫτࢦͱ͍͏ݴ༿ͳ͔ͬͨ •
ΦϒδΣΫτࢦݴޠʹݟΒΕΔಛΛ͍͍ͭ࣋ͬͯͨ͘ • e.g. ΦϒδΣΫτɺΫϥεɺܧঝɺΨϕʔδίϨΫγϣϯ • γϛϡϨʔγϣϯʹ༻͢ΔϞσϧΛΦϒδΣΫτͰදݱ
ΦϒδΣΫτࢦϓϩάϥϛϯάͷܥේ Simula Java Ruby ΦϒδΣΫτͱ ϝοηʔδ நσʔλܕ ૪ͷ࣠ C SmallTalk
C++ ߏԽϓϩάϥϛϯά
“ΦϒδΣΫτͱϝοηʔδϯά"ͷ Smalltalk • 1970 ɺύϩΞϧτݚڀॴͰΞϥϯɾέΠΛத৺ʹ։ൃ͞Εͨ • ΞϥϯɾέΠͷΦϒδΣΫτͱϝοηʔδϯάͱ͍͏Ϟσϧ͕جૅ • ҎԼͷӨڹΛड͚͍ͯΔ •
Simula ͷΦϒδΣΫτ • ΞϥϯɾέΠͷϝοηʔδϯά • ڭҭ༻ݴޠ LOGO • ΦϒδΣΫτࢦͱ͍͏ݴ༿ Smalltalk ͷ։ൃΛ௨ͯ͡ੜ·Εͨ
ΦϒδΣΫτࢦϓϩάϥϛϯάͷܥේ Simula Java Ruby ΦϒδΣΫτͱ ϝοηʔδ நσʔλܕ ૪ͷ࣠ C SmallTalk
C++ ߏԽϓϩάϥϛϯά
ߏԽϓϩάϥϛϯάͷԆͱͯ͠ͷ C++ • 1983 ɺϕϧݚڀॴʹͯϏϟʔωɾετϩϰετϧοϓʹΑΓ։ൃ͞ Εͨ • ॳͷ໊લ C with
Classes • Simulla ͷಛΛ C ݴޠʹऔΓೖΕΔ͜ͱ͕తͩͬͨ • Smalltalk ͷӨڹݟΒΕͳ͍ • e.g. base class, derived class • ߏԽϓϩάϥϛϯάͷύϥμΠϜ(C ݴޠ)ͷԆʹΦϒδΣΫτࢦϓ ϩάϥϛϯά(Simulla)ΛऔΓೖΕ͍ͯΔ
݁ہɺΦϒδΣΫτࢦ ϓϩάϥϛϯάʹ ͲΜͳՁ͕͋Δ/͋ͬͨͷ͔
ΦϒδΣΫτࢦϓϩάϥϛϯάͷՁ 1. ༷ʑͳΦϒδΣΫτࢦݴޠ 2. ΞΫλʔϞσϧ 3. ศརͰ҆શͳϙϦϞʔϑΟζϜ
ΦϒδΣΫτࢦϓϩάϥϛϯάͷՁ 1. ༷ʑͳΦϒδΣΫτࢦݴޠ 2. ΞΫλʔϞσϧ 3. ศརͰ҆શͳϙϦϞʔϑΟζϜ
ΞΫλʔϞσϧ • 1973ɺMITͷΧʔϧɾώϡʔΠοτ͕ߟҊ • ݸʑͷΦϒδΣΫτ(ΞΫλʔ)͕ඇಉظʹϝοηʔδ௨৴Ͱ ΓऔΓΛߦ͏Ϟσϧ • Simula, SmalltalkͷΦϒδΣΫτࢦϓϩάϥϛϯάͷӨڹ •
ߴੑೳͳฒྻίϯϐϡʔλ͕͍ۙকདྷొ͢Δͱͷ༧ଌ͔Β ੜ·Εͨ • ۙͷฒߦϓϩάϥϛϯάͷجૅ(Erlang, Go)
ΦϒδΣΫτࢦϓϩάϥϛϯάͷՁ 1. ༷ʑͳΦϒδΣΫτࢦݴޠ 2. ΞΫλʔϞσϧ 3. ศརͰ҆શͳϙϦϞʔϑΟζϜ
ศརͰ҆શͳϙϦϞʔϑΟζϜ • ϙϦϞʔϑΟζϜؔͷϙΠϯλͷԠ༻ • ৽͍֓͠೦Ͱͳ͍ • ϙϦϞʔϑΟζϜͷՁ • ґଘؔͷٯస(੍ޚ)
ϙϦϞʔϑΟζϜؔͷϙ ΠϯλͷԠ༻ struct FILE { … int (*read)(); … }
̴̧̱̾́̓ ̘ɽ̸̢̰́̓̽; ֯ య; ߴ ਖ਼߂. Clean ArchitectureɹୡਓʹֶͿιϑτΣΞͷߏͱઃܭ (ΞεΩʔυϫϯΰ) (Kindle ͷҐஔNo.877-878). גࣜձࣾυϫϯ ΰ. Kindle ൛. ΑΓҾ༻ #include "file. h" … int read() {int c;/*...*/ return c;} … struct FILE console = {open, close, read, write, seek}; extern struct FILE* STDIN; int getchar() { return STDIN->read(); } • UNIXͷඪ४ೖྗͱඪ४ग़ྗͷҰྫ • ࣮͕IOσόΠεʹґଘ͠ͳ͍ • getcharؔ ˠSTDINߏମͷϝϯόͷreadؔ ϙΠϯλ ˠϙΠϯλͷࢦؔ͢ • STDIN͕ΠϯλʔϑΣʔε૬ ίʔυྫ(Cݴޠ)
ؔϙΠϯλͷ • ϙΠϯλෆศͰةݥʁ • Cಛ༗ͷ • ϙΠϯλͷએݴ͕ಡΈʹ͍͘ • e.g. int
(*func_p)(int a) intΛฦ͢ҾintͷؔͷϙΠϯλfunc_pͷએݴ(ࠞཚ) • ؔࣜͷதͰؔͷϙΠϯλʹಡΈସ͑ΒΕΔͱ͍͏ϧʔϧ • e.g. ίʔϧόοΫؔfunc1ͷ͠ํfunc(func1)func(&func1)OK • Ұൠతͳ • ෳࡶԽ͢Δͱσόοά͕͍͠ • ྖҬഁյ લڮ (2001) . CݴޠϙΠϯλશ੍((ඪ४ϓϩάϥϚʔζϥΠϒϥϦ) ٕज़ධࣾ ΑΓཁ
ϙϦϞʔϑΟζϜͷՁ • ґଘؔٯసͷݪଇ(DIP)ʹد༩ • ιʔείʔυͷґଘํ۩(ԼҐ)͔Β ந(্Ґ)ͷΈͱ͢Δ͖ ॲཧͷྲྀΕ(ݺͼग़͠) ґଘ ΫϥεB ΫϥεA
ΫϥεA Πϯλʔ ϑΣʔεB ΫϥεB ΠϯλʔϑΣʔεBͷ ಋೖ ґଘؔͷٯస ্Ґ ԼҐ
·ͱΊ • ΦϒδΣΫτࢦϓϩάϥϛϯάϓϩάϥ ϛϯάͷύϥμΠϜͷ1ͭ • େ͖͘2ͭͷࢥ͕ଘࡏ͢Δ(ΦϒδΣΫτͱϝοηʔδϯ ά vs நσʔλ) •
ΦϒδΣΫτࢦϓϩάϥϛϯάݴޠʹײँ
ࢀߟจݙ • ̴̧̱̾́̓ ̘ɽ̸̢̰́̓̽; ֯ య; ߴ ਖ਼߂(2018) Clean Architectureɹୡਓʹֶ
ͿιϑτΣΞͷߏͱઃܭ. υϫϯΰ. • ·ͭͱΏ͖ͻΖ(2016). ·ͭͱΏ͖ͻΖ ݴޠͷ͘͠Έ. ܦBPࣾ. • લڮ (2001) . CݴޠϙΠϯλશ੍((ඪ४ϓϩάϥϚʔζϥΠϒϥϦ) .ٕज़ධࣾ . Πϥετ • ͔Θ͍͍ϑϦʔૉࡐू͍Β͢ͱ
͓ΘΓ