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
340
0
Share
オブジェクト指向プログラミングについて調べてみた
オブジェクト指向プログラミングとは何か/その歴史と価値について
yn2011
August 31, 2018
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
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.5k
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
300
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
2.4k
JavaDoc 再入門
nagise
0
280
CSC307 Lecture 17
javiergs
PRO
0
310
Lessons from Spec-Driven Development
simas
PRO
0
140
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
550
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
310
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
190
Inside Stream API
skrb
1
640
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
110
net-httpのHTTP/2対応について
naruse
0
440
Featured
See All Featured
Abbi's Birthday
coloredviolet
2
7.9k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
130
How STYLIGHT went responsive
nonsquared
100
6.2k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.6k
Producing Creativity
orderedlist
PRO
348
40k
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ݴޠϙΠϯλશ੍((ඪ४ϓϩάϥϚʔζϥΠϒϥϦ) .ٕज़ධࣾ . Πϥετ • ͔Θ͍͍ϑϦʔૉࡐू͍Β͢ͱ
͓ΘΓ