Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
オブジェクト指向(超基礎)
Search
kuma
August 28, 2021
Programming
170
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
オブジェクト指向(超基礎)
kuma
August 28, 2021
More Decks by kuma
See All by kuma
エンジニアの輪スライド
kumainataku
0
290
20220730[PHP]デザインパターン色々学んでみた
kumainataku
0
150
20220227 可読性って大事
kumainataku
0
94
20220319[Laravel]想定外のN+1アラート
kumainataku
0
200
20211027_僕の転職活動の振り返り.pdf
kumainataku
0
120
20210516 LT資料(PHP echo print)
kumainataku
0
61
20210425 LT会(基本情報技術者)
kumainataku
0
52
202104 読書LT会
kumainataku
0
220
Other Decks in Programming
See All in Programming
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
2
1.9k
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
360
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
120
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
200
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
1k
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
Optunaを作ったときにやりたかったこと、その後 (2026/10/16, Optuna Meetup #3)
iwiwi
1
330
APNsからLive Activityを開始する話
yumnumm
0
170
AWSに止められる覚悟してますか?
morizo_1984
2
530
プロダクトコードからライブラリの境界を見つける
elmetal
PRO
0
120
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
140
CodeRabbitの効果検証と過ごしてみた3ヶ月
armondando
0
230
Featured
See All Featured
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
320
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
470
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
Statistics for Hackers
jakevdp
799
230k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
600
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
450
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.1k
We Have a Design System, Now What?
morganepeng
55
8.4k
Into the Great Unknown - MozCon
thekraken
41
2.8k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
59k
Transcript
オブジェクト指向を (今さらながら) 基礎から学んだ クマ
自己紹介
名前:クマ 趣味:テニス、ご飯めぐり(がっつり系)、フェス 職歴: 2016/4 ~ 自動車部品メーカー(営業) 2020/1 ~ 自宅警備 2021/5
~ 都内自社/受託開発企業 言語:PHP(Laravel)
目次
目次 1. 背景 2. 「オブジェクト指向」とは? 3. 「オブジェクト指向」のよくある間違い 4. 所感
では、やっていこう。
背景
転職前 「テキスト内容を少しいじって…」 「この記事のコードを少しいじって…」 「OK!できた!(動いた!)」 ポートフォリオ(PHPにて)
就職後 「おん?(動かねえ)」 Laravelを使ったプロジェクト 「テキスト内容を少しいじって…」 「他のソースコードのココを変更すれば…」
Laravelとは? ・PHPをベースに作られたMVCモデルのフレームワーク ・MVCモデルはオブジェクト指向の一種の開発手法 ・オブジェクト指向の理解なしでは理解不可能 ・3大要素である 「クラス」 「継承」 「ポリモーフィズム」 を多用
一方。。。
私の「オブジェクト指向」の理解レベル オブジェクト思考の3大要素? 「クラス」「継承」…まだあるの? カプセル化? え、ポ…ポリモ―…なんて? オブジェクト?インスタンス? クラスから作るんでしょ? (使い方は知らない…)
もはや事故。 (就職先の皆様、 申し訳ございません…)
「なんとかせねば…」 この思いで、基本から学習しました。 (今さら)
2. 「オブジェクト指向」とは?
重要な3大要素 1. クラス 2. 継承 3. ポリモーフィズム
1, クラス
クラス クラスは「まとめて」「隠して」「たくさん作る」仕組み 1)サブルーチン(≒関数、メソッド)と変数を「まとめる」 2)クラスの内部だけで使う変数をサブルーチンを「隠す」 3)1つのクラスからインスランスを「たくさん作る」
例えば…
~クラスがない世界~
~クラスがない世界~ 変数A = ~ ; 変数B = ~; メソッドA(){ …
}; 変数C = ~; メソッドA; // 呼び出し 佐藤さん 田中さん 例えばこんな共同開発をしていたとする 変数A = ~~; 変数B = ~; メソッドA(){ … }; 鈴木さん
問題点
~クラスがない世界~ 変数A = ~ ; 変数B = ~; メソッドA(){ …
}; 変数C = ~; メソッドA; // 呼び出し echo 変数A; 佐藤さん 田中さん こんなことが起きる 変数A = ~~; 変数B = ~; メソッドA(){ … }; 鈴木さん 問題点① 佐藤さん作のメソッドA を呼び出したい →鈴木さん作のメソッド Aを呼び出してしまうか もしれない 問題点② 佐藤さん作の変数Aを呼 び出したい →鈴木さん作の変数Aを 呼び出してしまうかもし れない
~クラスがある世界~
~クラスがある世界~ Class Sato { 変数A = ~ ; 変数B =
~; メソッドA(){ … }; } Class Tanaka extend Suzuki { 変数C = ~; メソッドA; // 呼び出し } 佐藤さん 田中さん Class Suzuki { 変数A = ~~; 変数B = ~; メソッドA(){ … }; } 鈴木さん メリット② 継承により呼び出したい クラスのメソッドを的確 に指定 メリット① 機能ごとに「まとめる」 ことができて可読性UP 加えて、他クラスからの 介入を阻止して「隠す」 ことができる
継承
継承 サブルーチンを呼び出す側のロジックを一本化(統一)する仕組み =「共通メインルーチン」を作る仕組み
例えば…
~クラスがある世界~ Class Sato { 変数A = ~ ; 変数B =
~; メソッドA(){ … }; } Class Tanaka extend Suzuki { 変数C = ~; メソッドA; // 呼び出し } 佐藤さん 田中さん Class Suzuki { 変数A = ~~; 変数B = ~; メソッドA(){ … }; } 鈴木さん メリット② 呼び出したいクラスのメ ソッドを的確に指定 ・メリット Satoクラスの変数A, Bを Tanakaクラスで使いたい! →extendsするだけ! 可読性向上&開発効率UP!
ポリモーフィズム
ポリモーフィズム サブルーチンを呼び出す側のロジックを一本化(統一)する仕組み =「共通メインルーチン」を作る仕組み
例えば…
~ポリモーフィックな世界~ Class User extends Order { メソッドB(){ … }; }
Class Order { メソッドB(引数){ … } } Userクラス(親) Orderクラス(子) Class Guest extends Order { メソッドB(){ … }; } Guestクラス(親) ①メソッド呼び出し。 引数によって呼び出すクラス を指定 Class Withdrawed extends Order { メソッドB(){ … }; } Withdrawedクラス(親) … メソッドB(引数){; … } Testクラス ②指定したメソッド呼び出し 共通メインルーチン
結論
3大要素が整った世界は 超快適な開発環境
3. 「オブジェクト指向」の よくある間違い
先に結論を言うと…
現実世界と オブジェクト指向 を混同しないようにしよう。
???
どゆこと???
つまり、こういうこと
オブジェクト指向的思考 (例:イッヌの誕生) ~クラス~
インスタンス=「具体的なモノ」 オブジェクト指向 イッヌクラス 「タロー」オブジェクト 「ポチ」オブジェクト インスタンス化 インスタンス化 ・例:「イッヌ」をクラス、「ポチ」「タロー」はインスタンス クラス=「同種の集まり」
一つ質問です。
現実世界も同じですか?
否。
現実世界的思考 (例:イッヌの誕生)
インスタンス=「具体的なモノ」 現実世界 タロー 「サクラ」 「ポチ」 ・例:「ポチ」「サクラ」により、「タロー」誕生 誕生後にクラス化 =自分で飼うなら「愛犬」クラス 他人に譲るなら「他人のペット」クラス ×
まとめると→
▽現実世界 インスタンス→クラス ▽オブジェクト指向 クラス→インスタンス の順番。
要するに…
「オブジェクト指向」 と 「現実世界」 は 似て非なるもの。
なので、、、
現実世界と オブジェクト指向 を混同しないようにしよう。 (2回目)
以上です。
参考文献 オブジェクト指向でなぜつくるのか 第2版
ご清聴ありがとうございました。