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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
150
一番安い子だーれだ?~黒字化のための無慈悲なタスク配分~ / Distribute tasks
moomooya
1
3.4k
はじめてのオンラインイベント配信 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
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
2k
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
120
ふつうのFeature Flag実践入門
irof
7
3.8k
AutonomyとControlのあいだ:Graflowで記述するAIエージェント協調
myui
0
120
さぁV100、メモリをお食べ・・・
nilpe
0
140
Oxlintのカスタムルールの現況
syumai
6
1.1k
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
120
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
120
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
5.6k
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
210
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
230
Contextとはなにか
chiroruxx
1
310
Featured
See All Featured
Designing for humans not robots
tammielis
254
26k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
410
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.5k
The Curse of the Amulet
leimatthew05
1
13k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
200
Navigating Weather and Climate Data
rabernat
0
220
My Coaching Mixtape
mlcsv
0
150
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
380
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