Slide 1

Slide 1 text

#ooltjp ©2020 RAKUS Co., Ltd. オブジェクト指向を学んでから 20年間でモヤッたこと Isamu Suzuki 2020.2.5

Slide 2

Slide 2 text

#ooltjp 鈴木 勇 / Isamu Suzuki @moomooya 株式会社ラクス ● 新卒採用イベントやったり ● 技術選定したり ● 社内傭兵やったり ● 社内勉強会開いたり ● OORC出まぁす! ● Node.jsおじさん ● Pythonおじさん AtCoderはまだ灰色 ● 勉強会レポ最速おじさん ● MSA考えるの好きおじさん ● アナログゲームデザイナー

Slide 3

Slide 3 text

#ooltjp まずは宣伝 技術書典8 1日目(2/29) い05 浄瑠璃ソフト天遊団 さんにて 委託販売予定です

Slide 4

Slide 4 text

#ooltjp オブジェクト指向との出 会い

Slide 5

Slide 5 text

#ooltjp 思い起こせば約20年前…… ● 高校1年生 ● 主にC言語 ● 「ほぉ……オブジェクト指向とな……」 ○ C++やりはじめて軽く挫折 ○ なぜかTurbo Pascalで学習 ■ 『ゲーム&&オブジェクト指向プログラミング』

Slide 6

Slide 6 text

#ooltjp オブジェクト指向プログラミング 完全に理解した()

Slide 7

Slide 7 text

#ooltjp OOPについて友人と語り合った高校時代 高校時代に議論してた内容(遠い記憶を掘り起こしながら) この頃Java1.2がリリースされたのでJava使い始めました。 「多態性めっちゃ便利、でも同名メソッドはちゃんと同じ振る舞いさせないと」 「インタフェースイケてる、実装の差し替え(DI)素晴らしい」 「現実世界の射影だからコード設計わかりやすい」 オブジェクト指向大好きマンになりました

Slide 8

Slide 8 text

#ooltjp 大学時代もOOP ゼミでオセロAIを組むときも 「石とボードとプレイヤーと……」 といった具合に素直にオブジェクト指向で クラス設計していました。

Slide 9

Slide 9 text

#ooltjp で、社会人

Slide 10

Slide 10 text

#ooltjp Moya1: プロダクトコードでのJava ● あまり機能が使われていなかった ○ 多態性 ○ 継承(Abstract, Interface) ○ (思い出したら) ● 実装者のレベルがばらつくため制限 ○ まあ分かる……わかる……けど ○ 当時SIerで半分くらい派遣エンジニア、という環境でした

Slide 11

Slide 11 text

#ooltjp Moya2:多態性(というかオーバーロード)の履き違い ↑大抵こんな感じになると思う たまに全然違う処理を実装し始める輩がいる……そんな地獄がありました。 public class Polymorphism { void set(int a, int b, boolean c) { // ... } void set(int a) { this.set(a, 1, false); // ↑のメソッドをデフォルト値で補完して呼んでる } }

Slide 12

Slide 12 text

#ooltjp Moya3:DI=DIコンテナ? ● 疎結合は正義 ● DIも好き ● だがDIコンテナが好きとは限らない ○ 「とりあえずSpring」……じゃねーですよ怒

Slide 13

Slide 13 text

#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(); } }

Slide 14

Slide 14 text

#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(); } } 本番用実装 モック実装 ←テストコード

Slide 15

Slide 15 text

#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コンテナは有用 そんな複雑なシステムどれだけある? (そしてそんな複雑なシステムだとリブートなしで切り替えたかったりもする)

Slide 16

Slide 16 text

#ooltjp 何が言いたいかというと

Slide 17

Slide 17 text

#ooltjp Spark Frameworkを使え! #推しFW

Slide 18

Slide 18 text

#ooltjp Moya4:MVCはオブジェクト指向? 続きは Object-Oriented Rejected Conference にて!

Slide 19

Slide 19 text

#ooltjp Thank you