Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
【個人的】オブジェクト指向の現在地
虎の穴ラボ株式会社
June 29, 2022
Technology
1
290
【個人的】オブジェクト指向の現在地
虎の穴ラボ株式会社
June 29, 2022
Tweet
Share
More Decks by 虎の穴ラボ株式会社
See All by 虎の穴ラボ株式会社
Let_s_Go_Talk__6__GoのLT会_.pdf
toranoana
0
11
Fresh(Deno)で 画像投稿サイトを作ってみよう! with Cloudflare x Tora Viewer
toranoana
0
190
Deno Deployを使ってマークダウンで 書けるブログが爆速で建てられた話【toranoana.deno #10】
toranoana
0
220
TypeScript初心者がDeno+Freshで GraphQLエンドポイントを作成した話
toranoana
0
120
【20221019_toranoana.deno#9】閉鎖した個人開発のサービスを Deno Deployで復元する
toranoana
0
150
【20221019_toranoana.deno#9】ブログをlumeに移植しよう
toranoana
0
180
【20220920UV Study : フロントエンドLT会#7】WebAssemblyでブロック崩しを作ってみた話
toranoana
0
54
マネジメントLT_とらのあな通販マーケティングチームでの 開発の進め方
toranoana
0
73
Amplify + Next.js + TypeScript のアプリをいい感じにしたかった
toranoana
1
380
Other Decks in Technology
See All in Technology
Exploring MapStore Release 2022.02: improved 3DTiles support and more
simboss
PRO
0
380
SignalR を使ったアプリケーション開発をより快適に!
nenonaninu
0
670
02_プロトタイピングの進め方
kouzoukaikaku
0
620
SSMパラメーターストアでクロススタック参照の罠を回避する
shuyakinjo
0
7.7k
OpenShiftのリリースノートを整理してみた
loftkun
2
420
データベースの発表には RDBMS 以外もありますよ
maroon1st
0
240
SPA・SSGでSSRのようなOGP対応!
simo123
2
160
AI Services 概要 / AI Services overview
oracle4engineer
PRO
0
170
もし本番ネットワークをまるごと仮想環境に”コピー”できたらうれしいですか? / janog51
corestate55
0
390
KyvernoとRed Hat ACMを用いたマルチクラスターの一元的なポリシー制御
ry
0
210
SmartHRからOktaへのSCIM連携で作り出すHRドリブンのアカウント管理
jousysmiler
1
120
ユーザーテストガイドライン VERSION 2.0
kouzoukaikaku
0
1.4k
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
318
19k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
500
130k
4 Signs Your Business is Dying
shpigford
171
20k
Writing Fast Ruby
sferik
613
58k
Unsuck your backbone
ammeep
659
56k
5 minutes of I Can Smell Your CMS
philhawksworth
198
18k
Building Applications with DynamoDB
mza
85
5k
Producing Creativity
orderedlist
PRO
335
38k
Atom: Resistance is Futile
akmur
256
24k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
2
400
Rebuilding a faster, lazier Slack
samanthasiow
69
7.5k
Learning to Love Humans: Emotional Interface Design
aarron
263
38k
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