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
160
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
140
20220227 可読性って大事
kumainataku
0
84
20220319[Laravel]想定外のN+1アラート
kumainataku
0
200
20211027_僕の転職活動の振り返り.pdf
kumainataku
0
120
20210516 LT資料(PHP echo print)
kumainataku
0
59
20210425 LT会(基本情報技術者)
kumainataku
0
49
202104 読書LT会
kumainataku
0
210
Other Decks in Programming
See All in Programming
RTSPクライアントを自作してみた話
simotin13
0
570
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
110
さぁV100、メモリをお食べ・・・
nilpe
0
140
AIチームを指揮するOSS「TAKT」活用術 / How to Use “TAKT,” an OSS Tool for Orchestrating AI Teams
nrslib
6
880
AutonomyとControlのあいだ:Graflowで記述するAIエージェント協調
myui
0
120
技術記事、 専門家としてのプログラマ、 言語化
mizchi
4
2.6k
Claspは野良GASの夢をみるか
takter00
0
180
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
120
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
2
560
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
160
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
180
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
560
Featured
See All Featured
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Exploring anti-patterns in Rails
aemeredith
3
400
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Documentation Writing (for coders)
carmenintech
77
5.4k
A better future with KSS
kneath
240
18k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
1.7k
Context Engineering - Making Every Token Count
addyosmani
9
960
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
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版
ご清聴ありがとうございました。