Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
オブジェクト指向を学んでから20年間でモヤったこと / Object-Oriented-groomy-in-20-years
moomoo-ya
February 05, 2020
Programming
0
280
オブジェクト指向を学んでから20年間でモヤったこと / Object-Oriented-groomy-in-20-years
moomoo-ya
February 05, 2020
Tweet
Share
More Decks by moomoo-ya
See All by moomoo-ya
サービスを陳腐化させない組織だった技術刷新 / Technology Renewal Initiatives
moomooya
0
430
はじめてのオンラインイベント配信 with COVID-19 バグ修正版 / Online-Event-bugfixed
moomooya
0
25
一番安い子だーれだ?~黒字化のための無慈悲なタスク配分~ / Distribute tasks
moomooya
0
1.7k
はじめてのオンラインイベント配信 with COVID-19 バグあり版 / Online-Event-includes-bug
moomooya
0
610
やはり俺のLT登壇はまちがっている。 / my-lightning-talk-is-wrong-as-i-expected
moomooya
3
1.1k
Gatsby.jsで.md/.adocが混在できるテンプレートを作ったときの苦しみ / Pain-to-create-gatsby-template-that-supports-markdown-and-asciidoc
moomooya
0
270
LADRのすすめ&先行技術検証PRJの紹介 / Introducing-LADR-and-Technology-verification
moomooya
5
1.4k
技術書へのアクセスを劇的に向上させた話 / oreilly-safari-and-acm-membership
moomooya
2
4.9k
モノリスにおけるビジネスロジックの設計 ~アグリゲートパターン~ / aggregate-pattern-for-domain-modeling-on-monolithic
moomooya
2
460
Other Decks in Programming
See All in Programming
ベストプラクティス・ドリフト
sssssssssssshhhhhhhhhh
1
220
僕が便利だと感じる Snow Monkey の特徴/20220723_Gifu_WordPress_Meetup
oleindesign
0
120
How GitHub Supports Vim License Detection, The Five Years Journey
othree
1
400
Pluggable Storage in PostgreSQL
sira
1
200
サーバーレスパターンから学ぶデータ分析基盤構築 / devio2022
kasacchiful
0
520
atama plusの開発チームはどのように「不確実性」に向き合ってきたか〜2022夏版〜
atamaplus
3
650
料理の注文メニューの3D化への挑戦
hideg
0
300
Introduction to Property-Based Testing @ COSCUP 2022
cybai
1
150
「困りごと」から始める個人開発
ikumatadokoro
4
270
Records の使い方はこれでいいの? をみんなで考えたい / Java DO #20
gishi_yama
0
140
Enzyme から React Native Testing Library に移行した経緯 / 2022-07-20
tamago3keran
1
160
企業内スモールデータでのデータ解析
hamage9
0
920
Featured
See All Featured
Atom: Resistance is Futile
akmur
255
21k
The Illustrated Children's Guide to Kubernetes
chrisshort
18
40k
Mobile First: as difficult as doing things right
swwweet
213
7.6k
The Mythical Team-Month
searls
210
39k
The Art of Programming - Codeland 2020
erikaheidi
32
11k
Code Review Best Practice
trishagee
44
9.8k
4 Signs Your Business is Dying
shpigford
169
20k
Building Applications with DynamoDB
mza
84
4.8k
Gamification - CAS2011
davidbonilla
75
3.9k
Six Lessons from altMBA
skipperchong
14
1.4k
WebSockets: Embracing the real-time Web
robhawkes
57
5.6k
5 minutes of I Can Smell Your CMS
philhawksworth
196
18k
Transcript
#ooltjp ©2020 RAKUS Co., Ltd. オブジェクト指向を学んでから 20年間でモヤッたこと Isamu Suzuki 2020.2.5
#ooltjp 鈴木 勇 / Isamu Suzuki @moomooya 株式会社ラクス • 新卒採用イベントやったり
• 技術選定したり • 社内傭兵やったり • 社内勉強会開いたり • OORC出まぁす! • Node.jsおじさん • Pythonおじさん AtCoderはまだ灰色 • 勉強会レポ最速おじさん • MSA考えるの好きおじさん • アナログゲームデザイナー
#ooltjp まずは宣伝 技術書典8 1日目(2/29) い05 浄瑠璃ソフト天遊団 さんにて 委託販売予定です
#ooltjp オブジェクト指向との出 会い
#ooltjp 思い起こせば約20年前…… • 高校1年生 • 主にC言語 • 「ほぉ……オブジェクト指向とな……」 ◦ C++やりはじめて軽く挫折
◦ なぜかTurbo Pascalで学習 ▪ 『ゲーム&&オブジェクト指向プログラミング』
#ooltjp オブジェクト指向プログラミング 完全に理解した()
#ooltjp OOPについて友人と語り合った高校時代 高校時代に議論してた内容(遠い記憶を掘り起こしながら) この頃Java1.2がリリースされたのでJava使い始めました。 「多態性めっちゃ便利、でも同名メソッドはちゃんと同じ振る舞いさせないと」 「インタフェースイケてる、実装の差し替え(DI)素晴らしい」 「現実世界の射影だからコード設計わかりやすい」 オブジェクト指向大好きマンになりました
#ooltjp 大学時代もOOP ゼミでオセロAIを組むときも 「石とボードとプレイヤーと……」 といった具合に素直にオブジェクト指向で クラス設計していました。
#ooltjp で、社会人
#ooltjp Moya1: プロダクトコードでのJava • あまり機能が使われていなかった ◦ 多態性 ◦ 継承(Abstract, Interface)
◦ (思い出したら) • 実装者のレベルがばらつくため制限 ◦ まあ分かる……わかる……けど ◦ 当時SIerで半分くらい派遣エンジニア、という環境でした
#ooltjp Moya2:多態性(というかオーバーロード)の履き違い ↑大抵こんな感じになると思う たまに全然違う処理を実装し始める輩がいる……そんな地獄がありました。 public class Polymorphism { void set(int
a, int b, boolean c) { // ... } void set(int a) { this.set(a, 1, false); // ↑のメソッドをデフォルト値で補完して呼んでる } }
#ooltjp Moya3:DI=DIコンテナ? • 疎結合は正義 • DIも好き • だがDIコンテナが好きとは限らない ◦ 「とりあえずSpring」……じゃねーですよ怒
#ooltjp DI的な実装 public class App { private static final Dependency
processor = new DependencyImpl(); public static void main(String[] argv) { Client client = new Client(processor); client.run(); } } public class AppTest { private static final Dependency processor = new DependencyMock(); public static void main(String[] argv) { Client client = new Client(processor); client.run(); } }
#ooltjp DI的な実装 public class App { private static final Dependency
processor = new DependencyImpl(); public static void main(String[] argv) { Client client = new Client(processor); client.run(); } } public class AppTest { private static final Dependency processor = new DependencyMock(); public static void main(String[] argv) { Client client = new Client(processor); client.run(); } } 本番用実装 モック実装 ←テストコード
#ooltjp DI的な実装 public class App { private static final Dependency
processor = new DependencyImpl(); public static void main(String[] argv) { Client client = new Client(processor); client.run(); } } public class AppTest { private static final Dependency processor = new DependencyMock(); public static void main(String[] argv) { Client client = new Client(processor); client.run(); } } 本番用実装 テスト用モック ←テストコード DIでの切り替えケースが • モック利用 • テストケース くらいならこれで十分 より複雑な切り替えが必要→DIコンテナは有用 そんな複雑なシステムどれだけある? (そしてそんな複雑なシステムだとリブートなしで切り替えたかったりもする)
#ooltjp 何が言いたいかというと
#ooltjp Spark Frameworkを使え! #推しFW
#ooltjp Moya4:MVCはオブジェクト指向? 続きは Object-Oriented Rejected Conference にて!
#ooltjp Thank you