Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
990
UTF-8入門
yn2011
0
200
初心者系エンジニアにおすすめの技術書3冊
yn2011
0
210
Other Decks in Programming
See All in Programming
【CA.ai #3】Google ADKを活用したAI Agent開発と運用知見
harappa80
0
310
【CA.ai #3】ワークフローから見直すAIエージェント — 必要な場面と“選ばない”判断
satoaoaka
0
240
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
140
Full-Cycle Reactivity in Angular: SignalStore mit Signal Forms und Resources
manfredsteyer
PRO
0
140
手が足りない!兼業データエンジニアに必要だったアーキテクチャと立ち回り
zinkosuke
0
670
俺流レスポンシブコーディング 2025
tak_dcxi
14
8.7k
ハイパーメディア駆動アプリケーションとIslandアーキテクチャ: htmxによるWebアプリケーション開発と動的UIの局所的適用
nowaki28
0
420
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
38
26k
Tinkerbellから学ぶ、Podで DHCPをリッスンする手法
tomokon
0
130
How Software Deployment tools have changed in the past 20 years
geshan
0
29k
S3 VectorsとStrands Agentsを利用したAgentic RAGシステムの構築
tosuri13
6
310
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
160
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Automating Front-end Workflow
addyosmani
1371
200k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Building Flexible Design Systems
yeseniaperezcruz
330
39k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
The Cult of Friendly URLs
andyhume
79
6.7k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.6k
4 Signs Your Business is Dying
shpigford
186
22k
How GitHub (no longer) Works
holman
316
140k
Git: the NoSQL Database
bkeepers
PRO
432
66k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
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ݴޠϙΠϯλશ੍((ඪ४ϓϩάϥϚʔζϥΠϒϥϦ) .ٕज़ධࣾ . Πϥετ • ͔Θ͍͍ϑϦʔૉࡐू͍Β͢ͱ
͓ΘΓ