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
kuma
August 28, 2021
Programming
0
160
オブジェクト指向(超基礎)
kuma
August 28, 2021
Tweet
Share
More Decks by kuma
See All by kuma
エンジニアの輪スライド
kumainataku
0
240
20220730[PHP]デザインパターン色々学んでみた
kumainataku
0
140
20220227 可読性って大事
kumainataku
0
80
20220319[Laravel]想定外のN+1アラート
kumainataku
0
170
20211027_僕の転職活動の振り返り.pdf
kumainataku
0
110
20210516 LT資料(PHP echo print)
kumainataku
0
54
20210425 LT会(基本情報技術者)
kumainataku
0
43
202104 読書LT会
kumainataku
0
190
Other Decks in Programming
See All in Programming
PHPに関数型の魂を宿す〜PHP 8.5 で実現する堅牢なコードとは〜 #phpcon_hiroshima / phpcon-hiroshima-2025
shogogg
1
220
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
330
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
0
270
(Extension DC 2025) Actor境界を越える技術
teamhimeh
1
250
What's new in Spring Modulith?
olivergierke
1
150
株式会社 Sun terras カンパニーデック
sunterras
0
310
GraphQL×Railsアプリのデータベース負荷分散 - 月間3,000万人利用サービスを無停止で
koxya
1
1.3k
そのpreloadは必要?見過ごされたpreloadが技術的負債として爆発した日
mugitti9
2
3.4k
dynamic!
moro
10
7.9k
登壇は dynamic! な営みである / speech is dynamic
da1chi
0
340
はじめてのDSPy - 言語モデルを『プロンプト』ではなく『プログラミング』するための仕組み
masahiro_nishimi
2
450
Cursorハンズオン実践!
eltociear
2
1.1k
Featured
See All Featured
A Tale of Four Properties
chriscoyier
161
23k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
115
20k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Making Projects Easy
brettharned
120
6.4k
Docker and Python
trallard
46
3.6k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.2k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
870
For a Future-Friendly Web
brad_frost
180
9.9k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
61k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
980
It's Worth the Effort
3n
187
28k
jQuery: Nuts, Bolts and Bling
dougneiner
65
7.9k
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版
ご清聴ありがとうございました。