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
310
オブジェクト指向プログラミングについて調べてみた
オブジェクト指向プログラミングとは何か/その歴史と価値について
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
210
Other Decks in Programming
See All in Programming
CSC307 Lecture 01
javiergs
PRO
0
650
re:Invent 2025 のイケてるサービスを紹介する
maroon1st
0
160
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
はじめてのカスタムエージェント【GitHub Copilot Agent Mode編】
satoshi256kbyte
0
140
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
12
2.8k
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
1
580
脳の「省エネモード」をデバッグする ~System 1(直感)と System 2(論理)の切り替え~
panda728
PRO
0
130
ローカルLLMを⽤いてコード補完を⾏う VSCode拡張機能を作ってみた
nearme_tech
PRO
0
230
AI時代を生き抜く 新卒エンジニアの生きる道
coconala_engineer
1
500
公共交通オープンデータ × モバイルUX 複雑な運行情報を 『直感』に変換する技術
tinykitten
PRO
0
180
LLMで複雑な検索条件アセットから脱却する!! 生成的検索インタフェースの設計論
po3rin
4
1.1k
Python札幌 LT資料
t3tra
7
1.1k
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
1
150
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
410
Test your architecture with Archunit
thirion
1
2.1k
Tell your own story through comics
letsgokoyo
0
770
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
280
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
200
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
0
220
Google's AI Overviews - The New Search
badams
0
880
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
870
Paper Plane
katiecoart
PRO
0
45k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.3k
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ݴޠϙΠϯλશ੍((ඪ४ϓϩάϥϚʔζϥΠϒϥϦ) .ٕज़ධࣾ . Πϥετ • ͔Θ͍͍ϑϦʔૉࡐू͍Β͢ͱ
͓ΘΓ