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
虎の穴ラボ株式会社
June 29, 2022
Technology
600
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【個人的】オブジェクト指向の現在地
虎の穴ラボ株式会社
June 29, 2022
More Decks by 虎の穴ラボ株式会社
See All by 虎の穴ラボ株式会社
関西Ruby登壇資料
toranoana
0
38
Tailwind CSSとAtomic Designで実現する効率的な Web 開発の事例
toranoana
1
720
Denoについて、同人誌記事を出しました+update
toranoana
0
250
【虎の穴ラボ Tech Talk #2】プロンプトエンジニアリング
toranoana
0
170
20241121_[TechTalk#2]虎の穴ラボでのLLMについて取り組み紹介
toranoana
0
180
社内チャットへRAG導入した話(Tech Talk #2)
toranoana
0
250
Deno Deploy で Web Cache API を 使えるようになったので試した知見
toranoana
1
780
【虎の穴ラボ Tech Talk】虎の穴ラボTech Talk説明資料
toranoana
0
540
虎の穴ラボ Tech Talk_CDKでFargate環境構築
toranoana
1
710
Other Decks in Technology
See All in Technology
Running Kotlin + Quarkus with Lambda
nealle
1
4k
1つのリクエストを追って理解する - llm-dのP/D分離
akhino
1
170
M5Stackで作る BLEマウス GPSログの世界
tomokusaba
PRO
0
440
Classmethod Company Deck
satoshi7
1
740
フロントエンドカンファレンス関西2026 - 速すぎるUIに、待ち時間を
teamlab
PRO
0
190
CloudWatch Logsのコスト最適化:どこまでAIに任せてどこから人間が承認すべきか
yama3133
0
110
ウォンテッドリーの最近のプロダクトと技術の紹介
stomk
0
170
USB PDを使ってスマホを労わりたい
raspython3
0
180
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
680
Tofu-Controller lightning talk @ Containerday 2026
gionn
0
120
『SAR衛星データ解析入門』のご紹介とその応用
syuchimu
0
120
Post AI時代のリファクタリング実践記 / Refactoring in the post AI era
kaminashi
1
300
Featured
See All Featured
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
330
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
370
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
760
Music & Morning Musume
bryan
48
7.4k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
270
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Designing Experiences People Love
moore
143
24k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
Transcript
Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved. 【個人的】オブジェクト指向の現在地
虎の穴ラボ 新規開発チーム 河野 裕隆 T O R A N O A N A L a b
Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved. 自己紹介
河野裕隆 • 2019/08入社 • 新規開発チーム ◦ クリエイティア他 虎の穴ラボへの入社理由 • スキルを高めあえる仲間がほしい • ユーザーに近い仕事がしたい 2 好きなもの • VOCALOID(初音ミク) • 謎解き、クイズ 今期アニメ • まちカドまぞく2
Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved. さっそくですが
オブジェクト指向 ってなんですか? 3
Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved. •
人によって粒度、対象が違う言葉 ◦ OOD(設計) ◦ OOA(分析) ◦ OOP(プログラミング) ▪ 現代だと基本的にこれの話が多い • 元となる考えは40年以上前 What’s OO? 4
Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved. •
メッセージングベース(Smalltalk) ◦ オブジェクト間のメッセージのやり取りで表現 • 抽象データ型ベース(C++) ◦ カプセル化、継承、多態性←こっちが主流 OOPの解釈 5
Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved. •
カプセル化 • 継承 • 多態性 もちろん、そんなことはない 以下をやっていれば良い設計か 6
Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved. 「カプセル化?メンバ変数はprivateにして、Lombokで@Data※!」
「継承は同じ処理やっているところをまとめればいいんでしょ?」 「多態性ね、全部のクラスにinterface作っておかないと・・・」 オブジェクト指向の目的から離れてワードだけが先行している 例えば 7
Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved. 「カプセル化?メンバ変数はprivateにして、Lombokで@Data※!」
※LombokはJavaのライブラリ、@Dataでprivate fieldのgetterとsetterが自動生成される 「継承は同じ処理やっているところをまとめればいいんでしょ?」 最近だと継承よりコンポジションなんて言われることも増えた また再利用性としてではなく部分型(クラスの系統付け)に使われている 「多態性ね、全部のクラスにinterface作っておかないと・・・」 Yegor氏のブログ読むと幸せになれるかも https://www.yegor256.com/2018/09/18/fear-of-coupling.html 関数を渡すことでも実装できる(関数型っぽい考え方) 例えば 8
Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved. •
ひとえにオブジェクト指向と言ってもコンテキストで意味が異なる • できてから40年以上経っている 良い設計を表すバズワード感 =>「オブジェクト指向」をキーワードにするのはやめ たい 問題点 9
Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved. じゃあ、何で話すか
10
Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved. 抽象データ型ベース・・・
の「目的」で話そう 11
Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved. •
読みやすいコード • 変更しやすいコード • バグを生みにくいコード これらを達成するためにある OO自体は「目的」じゃなくて「手段」 抽象データ型ベースのOOの目的とは・・・? 12
Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved. ✘
「カプセル化できていないよ?外から触らないならprivateにして」 ◎ 「読んだときに余計な情報になっちゃうから外から見えないprivate にして関心事をわけたほうが良いよ」 =>関心事の分離はGRASP(実践UML)の責任性割り当てパターン等参照 個人的にバズワードっぽい「オブジェクト指向」より実践的な気がします つまり・・・ 13
Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved. •
読みやすいコード • 変更しやすいコード • バグを生みにくいコード これらを達成するためにある これらを達成する方法はOOだけではない!!! 抽象データ型ベースのOOの目的とは・・・? 14
Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved. •
継承、ポリモーフィズム(リスコフの置換原則を満たした派生型の定義方 法) ◦ Go, TypeScriptの構造的部分型 • オブジェクトに名前、状態、振る舞いを持たせる ◦ 今や状態はステートレスが良いと言われる ▪ 関数型の考え方 OO、OOPのちょっとした反例 15
Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved. •
OOPといえばJava・・・だが、関数型のパラダイムを取り入れる ◦ ラムダ式(Java 8) ◦ Pattern Matching for switch(Java 19で3rd Preview) ▪ 代数的データ型っぽいのも使えるようになる ◦ Immutableな設計の増加(List.of, LocalDateなど) JavaだからOOPではない!OOで書くからOOPになる OOPで書く必要もない 関数型の考え方 16
Copyright (C) 2022 Toranoana Lab Inc. All Rights Reserved. •
やや古い考え方になっている部分もある ◦ 厳密にオブジェクトにデータ構造と振る舞いの一体化を目指す ▪ =>Controllerとかのレイヤードアーキが使えない • 目的と対策として妥当な部分が多いので考え方の根底には持っておくべ き ◦ (対策の技術が根本としてOOとしての考え方かは別) • 抽象的ではあるがアーキごとの「良い設計」を学ぶことがベスト ◦ オブジェクト機能を利用したプログラミング ▪ https://speakerdeck.com/kishida/things-java-beginners-should-know?slide=51 OOの現在地まとめ 17