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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
虎の穴ラボ株式会社
June 29, 2022
Technology
590
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【個人的】オブジェクト指向の現在地
虎の穴ラボ株式会社
June 29, 2022
More Decks by 虎の穴ラボ株式会社
See All by 虎の穴ラボ株式会社
Tailwind CSSとAtomic Designで実現する効率的な Web 開発の事例
toranoana
1
670
Denoについて、同人誌記事を出しました+update
toranoana
0
230
【虎の穴ラボ Tech Talk #2】プロンプトエンジニアリング
toranoana
0
160
20241121_[TechTalk#2]虎の穴ラボでのLLMについて取り組み紹介
toranoana
0
160
社内チャットへRAG導入した話(Tech Talk #2)
toranoana
0
230
Deno Deploy で Web Cache API を 使えるようになったので試した知見
toranoana
1
730
【虎の穴ラボ Tech Talk】虎の穴ラボTech Talk説明資料
toranoana
0
500
虎の穴ラボ Tech Talk_CDKでFargate環境構築
toranoana
1
560
虎の穴ラボスキルアップ支援制度の利用例
toranoana
0
11k
Other Decks in Technology
See All in Technology
フルAIで個人開発して学んだあれこれ / yuruai vol.1
isaoshimizu
0
130
FPGAの開発コンペでZephyrを使ってみた
iotengineer22
0
200
クレデンシャル流出 ― 攻撃 3 時間 vs 復旧 10 時間。この非対称性にどう備えるか
kazzpapa3
3
570
時期が悪い!それでもRaspberry Piを買って遊んで活用するには / 20260627-osc26do-rpi-jikigawarui
akkiesoft
0
840
GitHub Copilot app最速の発信の裏側
tomokusaba
1
260
LayerX コーポレートエンジニアリング室におけるサプライチェーンセキュリティへの取り組み / Supply Chain Security at LayerX Corporate Engineering
yuyatakeyama
3
840
自分が詳しくない領域でAIを使う #プロヒス2026
konifar
20
7.5k
レガシーな広告配信システムでのAI駆動開発/運用の挑戦
i16fujimoto
0
120
MUSUBI 田中裕一『AIと共に行う「しごとのリデザイン」- スモールバックオフィス編』AI Ops Lab #4
musubi
0
320
アラート調査向けAIエージェントの本番導入とその後/AI Agents for Alert Investigation: Production Deployment and After
taddy_919
0
160
AWS Security Hub CSPMの成功・失敗体験
cmusudakeisuke
0
560
iOS アプリの「これって不具合ですか?」を AI に調べてもらう
miichan
0
140
Featured
See All Featured
How to Talk to Developers About Accessibility
jct
2
250
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
Git: the NoSQL Database
bkeepers
PRO
432
67k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
Balancing Empowerment & Direction
lara
6
1.2k
Become a Pro
speakerdeck
PRO
31
6k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
Visualization
eitanlees
152
17k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
610
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
Faster Mobile Websites
deanohume
310
32k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
620
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