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
オブジェクト指向を学んでから20年間でモヤったこと / Object-Oriented-gro...
Search
moomoo-ya
February 05, 2020
Programming
590
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
オブジェクト指向を学んでから20年間でモヤったこと / Object-Oriented-groomy-in-20-years
moomoo-ya
February 05, 2020
More Decks by moomoo-ya
See All by moomoo-ya
サービスを陳腐化させない組織だった技術刷新 / Technology Renewal Initiatives
moomooya
0
1.6k
はじめてのオンラインイベント配信 with COVID-19 バグ修正版 / Online-Event-bugfixed
moomooya
0
160
一番安い子だーれだ?~黒字化のための無慈悲なタスク配分~ / Distribute tasks
moomooya
1
3.5k
はじめてのオンラインイベント配信 with COVID-19 バグあり版 / Online-Event-includes-bug
moomooya
0
890
やはり俺のLT登壇はまちがっている。 / my-lightning-talk-is-wrong-as-i-expected
moomooya
4
2.6k
Gatsby.jsで.md/.adocが混在できるテンプレートを作ったときの苦しみ / Pain-to-create-gatsby-template-that-supports-markdown-and-asciidoc
moomooya
0
700
LADRのすすめ&先行技術検証PRJの紹介 / Introducing-LADR-and-Technology-verification
moomooya
5
2.9k
技術書へのアクセスを劇的に向上させた話 / oreilly-safari-and-acm-membership
moomooya
2
7.9k
モノリスにおけるビジネスロジックの設計 ~アグリゲートパターン~ / aggregate-pattern-for-domain-modeling-on-monolithic
moomooya
2
1.7k
Other Decks in Programming
See All in Programming
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
240
Creating Composable Callables in Contemporary C++
rollbear
0
200
Embedded SREと共に達成した会員管理システムのAWS移行 - SRE NEXT 2026 ランチスポンサーセッション
niftycorp
PRO
0
2.1k
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.9k
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.6k
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
470
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
250
AI がコードを書く時代における新卒エンジニアの仕事風景 (2026) / New Graduate Engineers in the Era of AI Coding (2026)
sushichan044
0
210
コーディングルールの鮮度を保ちたい for SRE NEXT 2026 / keep-fresh-go-internal-conventions-sre-next-2026
handlename
0
140
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
150
フィードバックで育てるAI開発
kotaminato
1
110
20260623_Loop Engineeringで自分の分身の問い合わせBotを作る
ryugen04
0
190
Featured
See All Featured
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
200
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.5k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
230
Skip the Path - Find Your Career Trail
mkilby
1
160
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
490
The Pragmatic Product Professional
lauravandoore
37
7.4k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
340
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
330
Building an army of robots
kneath
306
46k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
220
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