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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
yn2011
August 31, 2018
Programming
0
320
オブジェクト指向プログラミングについて調べてみた
オブジェクト指向プログラミングとは何か/その歴史と価値について
yn2011
August 31, 2018
Tweet
Share
More Decks by yn2011
See All by yn2011
シェル芸入門
yn2011
1
1k
UTF-8入門
yn2011
0
200
初心者系エンジニアにおすすめの技術書3冊
yn2011
0
220
Other Decks in Programming
See All in Programming
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
200
dchart: charts from deck markup
ajstarks
3
1k
カスタマーサクセス業務を変革したヘルススコアの実現と学び
_hummer0724
0
740
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
620
AI Agent の開発と運用を支える Durable Execution #AgentsInProd
izumin5210
7
2.3k
OCaml 5でモダンな並列プログラミングを Enjoyしよう!
haochenx
0
150
AWS re:Invent 2025参加 直前 Seattle-Tacoma Airport(SEA)におけるハードウェア紛失インシデントLT
tetutetu214
2
120
CSC307 Lecture 05
javiergs
PRO
0
500
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
180
AIによる開発の民主化を支える コンテキスト管理のこれまでとこれから
mulyu
3
500
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
210
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.4k
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
2
280
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Paper Plane (Part 1)
katiecoart
PRO
0
4.3k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
340
Information Architects: The Missing Link in Design Systems
soysaucechin
0
780
WENDY [Excerpt]
tessaabrams
9
36k
Darren the Foodie - Storyboard
khoart
PRO
2
2.4k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Building the Perfect Custom Keyboard
takai
2
690
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
The SEO identity crisis: Don't let AI make you average
varn
0
330
So, you think you're a good person
axbom
PRO
2
1.9k
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ݴޠϙΠϯλશ੍((ඪ४ϓϩάϥϚʔζϥΠϒϥϦ) .ٕज़ධࣾ . Πϥετ • ͔Θ͍͍ϑϦʔૉࡐू͍Β͢ͱ
͓ΘΓ