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
130
20220227 可読性って大事
kumainataku
0
80
20220319[Laravel]想定外のN+1アラート
kumainataku
0
160
20211027_僕の転職活動の振り返り.pdf
kumainataku
0
110
20210516 LT資料(PHP echo print)
kumainataku
0
54
20210425 LT会(基本情報技術者)
kumainataku
0
42
202104 読書LT会
kumainataku
0
190
Other Decks in Programming
See All in Programming
新世界の理解
koriym
0
130
あのころの iPod を どうにか再生させたい
orumin
2
2.2k
可変性を制する設計: 構造と振る舞いから考える概念モデリングとその実装
a_suenami
10
1.7k
Scale out your Claude Code ~自社専用Agentで10xする開発プロセス~
yukukotani
8
1.6k
Flutter로 Gemini와 MCP를 활용한 Agentic App 만들기 - 박제창 2025 I/O Extended Seoul
itsmedreamwalker
0
120
プロダクトという一杯を作る - プロダクトチームが味の責任を持つまでの煮込み奮闘記
hiliteeternal
0
420
Dart 参戦!!静的型付き言語界の隠れた実力者
kno3a87
0
180
#QiitaBash TDDで(自分の)開発がどう変わったか
ryosukedtomita
1
350
ワープロって実は計算機で
pepepper
2
1.2k
kiroでゲームを作ってみた
iriikeita
0
150
CEDEC2025 長期運営ゲームをあと10年続けるための0から始める自動テスト ~4000項目を50%自動化し、月1→毎日実行にした3年間~
akatsukigames_tech
0
110
コーディングは技術者(エンジニア)の嗜みでして / Learning the System Development Mindset from Rock Lady
mackey0225
2
240
Featured
See All Featured
Statistics for Hackers
jakevdp
799
220k
RailsConf 2023
tenderlove
30
1.2k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6k
Raft: Consensus for Rubyists
vanstee
140
7.1k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
110
19k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Become a Pro
speakerdeck
PRO
29
5.5k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6k
Building an army of robots
kneath
306
45k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
21
1.4k
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版
ご清聴ありがとうございました。