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
43
202104 読書LT会
kumainataku
0
190
Other Decks in Programming
See All in Programming
AI Coding Agentのセキュリティリスク:PRの自己承認とメルカリの対策
s3h
0
210
AI時代のUIはどこへ行く?
yusukebe
18
8.9k
Navigating Dependency Injection with Metro
zacsweers
3
260
テストコードはもう書かない:JetBrains AI Assistantに委ねる非同期処理のテスト自動設計・生成
makun
0
270
デザイナーが Androidエンジニアに 挑戦してみた
874wokiite
0
410
概念モデル→論理モデルで気をつけていること
sunnyone
1
110
テストカバレッジ100%を10年続けて得られた学びと品質
mottyzzz
2
590
アプリの "かわいい" を支えるアニメーションツールRiveについて
uetyo
0
270
AIコーディングAgentとの向き合い方
eycjur
0
270
Introducing ReActionView: A new ActionView-compatible ERB Engine @ Rails World 2025, Amsterdam
marcoroth
0
690
Deep Dive into Kotlin Flow
jmatsu
1
340
今から始めるClaude Code入門〜AIコーディングエージェントの歴史と導入〜
nokomoro3
0
150
Featured
See All Featured
Become a Pro
speakerdeck
PRO
29
5.5k
Six Lessons from altMBA
skipperchong
28
4k
The Invisible Side of Design
smashingmag
301
51k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
112
20k
Side Projects
sachag
455
43k
Docker and Python
trallard
45
3.6k
Thoughts on Productivity
jonyablonski
70
4.8k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Reflections from 52 weeks, 52 projects
jeffersonlam
352
21k
Bash Introduction
62gerente
615
210k
Code Reviewing Like a Champion
maltzj
525
40k
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版
ご清聴ありがとうございました。