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
虎の穴ラボ株式会社
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
25
Tailwind CSSとAtomic Designで実現する効率的な Web 開発の事例
toranoana
1
700
Denoについて、同人誌記事を出しました+update
toranoana
0
240
【虎の穴ラボ Tech Talk #2】プロンプトエンジニアリング
toranoana
0
160
20241121_[TechTalk#2]虎の穴ラボでのLLMについて取り組み紹介
toranoana
0
180
社内チャットへRAG導入した話(Tech Talk #2)
toranoana
0
250
Deno Deploy で Web Cache API を 使えるようになったので試した知見
toranoana
1
760
【虎の穴ラボ Tech Talk】虎の穴ラボTech Talk説明資料
toranoana
0
520
虎の穴ラボ Tech Talk_CDKでFargate環境構築
toranoana
1
690
Other Decks in Technology
See All in Technology
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.5k
紙 to デジタル
ichien178
0
430
The Django UUID Story - DjangoCon US 2026
pauloxnet
0
330
hookで自作する Claude Code の「実況ボード」
shinyasaita
2
250
When Token Pruning is Worse than Random: Understanding Visual Token Information in VLLMs
sansantech
PRO
0
190
[RSJ26] Flow as Flow: Modeling Robot Velocity Fields as Probability Velocity Fields
keio_smilab
PRO
0
150
暗号化?某ファイルストレージはどうなるの!? 3rd Partyとうまく付き合う秘密度ラベル設計
kasada
0
220
あなたの知らないバージョン命名規則
sat
PRO
2
870
Microsoft MVP プログラムを紹介するから目指す人増えてくれ
tsubakimoto_s
0
150
AI時代の「OAuth認証」にどう物申すか?(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
370
Claude Codeで開発以外の業務も爆速化しよう!
minorun365
PRO
11
9.2k
Digital Credentials API × OpenID4VP ブラウザ完結型本人確認の実装知見(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
360
Featured
See All Featured
How to Talk to Developers About Accessibility
jct
2
530
The World Runs on Bad Software
bkeepers
PRO
72
12k
Documentation Writing (for coders)
carmenintech
77
5.5k
A designer walks into a library…
pauljervisheath
211
24k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
390
Design in an AI World
tapps
1
290
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
500
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
The Limits of Empathy - UXLibs8
cassininazir
1
620
How to Think Like a Performance Engineer
csswizardry
28
2.8k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Agile that works and the tools we love
rasmusluckow
331
22k
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