Upgrade to Pro — share decks privately, control downloads, hide ads and more …

オブジェクト指向を学んでから20年間でモヤったこと / Object-Oriented-groomy-in-20-years

moomoo-ya
February 05, 2020

オブジェクト指向を学んでから20年間でモヤったこと / Object-Oriented-groomy-in-20-years

moomoo-ya

February 05, 2020
Tweet

More Decks by moomoo-ya

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  9. #ooltjp
    で、社会人

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  19. #ooltjp
    Thank you

    View Slide