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

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

0aa238a274c2397214b20d6eed58939b?s=47 moomoo-ya
February 05, 2020

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

0aa238a274c2397214b20d6eed58939b?s=128

moomoo-ya

February 05, 2020
Tweet

Transcript

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

  2. #ooltjp 鈴木 勇 / Isamu Suzuki @moomooya 株式会社ラクス • 新卒採用イベントやったり

    • 技術選定したり • 社内傭兵やったり • 社内勉強会開いたり • OORC出まぁす! • Node.jsおじさん • Pythonおじさん AtCoderはまだ灰色 • 勉強会レポ最速おじさん • MSA考えるの好きおじさん • アナログゲームデザイナー
  3. #ooltjp まずは宣伝 技術書典8 1日目(2/29) い05 浄瑠璃ソフト天遊団 さんにて 委託販売予定です

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

  5. #ooltjp 思い起こせば約20年前…… • 高校1年生 • 主にC言語 • 「ほぉ……オブジェクト指向とな……」 ◦ C++やりはじめて軽く挫折

    ◦ なぜかTurbo Pascalで学習 ▪ 『ゲーム&&オブジェクト指向プログラミング』
  6. #ooltjp オブジェクト指向プログラミング 完全に理解した()

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

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

  9. #ooltjp で、社会人

  10. #ooltjp Moya1: プロダクトコードでのJava • あまり機能が使われていなかった ◦ 多態性 ◦ 継承(Abstract, Interface)

    ◦ (思い出したら) • 実装者のレベルがばらつくため制限 ◦ まあ分かる……わかる……けど ◦ 当時SIerで半分くらい派遣エンジニア、という環境でした
  11. #ooltjp Moya2:多態性(というかオーバーロード)の履き違い ↑大抵こんな感じになると思う たまに全然違う処理を実装し始める輩がいる……そんな地獄がありました。 public class Polymorphism { void set(int

    a, int b, boolean c) { // ... } void set(int a) { this.set(a, 1, false); // ↑のメソッドをデフォルト値で補完して呼んでる } }
  12. #ooltjp Moya3:DI=DIコンテナ? • 疎結合は正義 • DIも好き • だがDIコンテナが好きとは限らない ◦ 「とりあえずSpring」……じゃねーですよ怒

  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(); } }
  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(); } } 本番用実装 モック実装 ←テストコード
  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コンテナは有用 そんな複雑なシステムどれだけある? (そしてそんな複雑なシステムだとリブートなしで切り替えたかったりもする)
  16. #ooltjp 何が言いたいかというと

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

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

  19. #ooltjp Thank you