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

2025-02-27 社内勉強会 オブジェクト指向入門

2025-02-27 社内勉強会 オブジェクト指向入門

Kentaro Abe

February 27, 2025
Tweet

Other Decks in Technology

Transcript

  1. 20 • if文の範囲を把握しづらい ◦ 勘違いしやすい • 処理のパターンが多い ◦ 考慮もれに繋がる 例えば:

    何重にもネストした if文 金額が1000円以上なら割引する、 という処理を追加したい場合 どこに書く?
  2. 42 • 数量や金額などを表現したいとき、どうしますか? • int や BigDecimal などの基本データ型を使うことが多い 1. 値オブジェクト

    - 基本データ型 の落とし穴 int, BigDecimal, String, LocalDate など はじめから用意されている型
  3. 44 • int はマイナス21億からプラス21億までの整数、 BigDecimal は実質無限の範囲の数値を表現できる 1. 値オブジェクト - 基本データ型

    の落とし穴 int, BigDecimal, String, LocalDate など はじめから用意されている型 業務上の異常値を表現できてしまうと、 システムが複雑化し、バグが混入する原因になる その範囲、 本当に必要?
  4. 56 配列やコレクションを使おうとすると、以下のような処理が頻出する 1. for 文などループ処理のロジック 2. 配列やコレクションの要素の数が変化する(可能性がある) 3. 個々の要素の内容が変化する(可能性がある) 4.

    ゼロ件の場合の処理 5. 要素の最大件数の制限 2. コレクションオブジェクト -  配列やコレクションはコードを複雑にする このようなコードがあちこちに散らばると、 プログラムが複雑になりがち
  5. 57 • 考え方は値オブジェクトと同じ • コレクション型の変数を 1つだけ持った専用クラス • コレクションを操作する ロジックをすべて集める ◦

    追加、削除、カウント、 特定条件の絞り込み、etc. 2. コレクションオブジェクト -  コレクションを扱うための専用クラス
  6. 59 • コレクション変数をそのまま返すメソッドを用意しない ◦ クラスの外部でコレクションを操作できてしまう 2. コレクションオブジェクト - 不変にする 悪い例

    1. コレクション操作のロジックをコレクションオブジェクトに移動する 2. コレクション操作の結果も同じ型のコレクションオブジェクトとして返す 3. コレクションを不変にして外部に渡す
  7. 60 • 外部でやりたい操作を、クラスに集められないか検討する • 操作の結果を同じ型のコレクションオブジェクトとして返す 2. コレクションオブジェクト - 不変にする 良い例

    1. コレクション操作のロジックをコレクションオブジェクトに移動する 2. コレクション操作の結果も同じ型のコレクションオブジェクトとして返す 3. コレクションを不変にして外部に渡す
  8. 61 • どうしてもコレクションを渡す必要がある場合、 変更できないコレクションを返す 2. コレクションオブジェクト - 不変にする 良い例 1.

    コレクション操作のロジックをコレクションオブジェクトに移動する 2. コレクション操作の結果も同じ型のコレクションオブジェクトとして返す 3. コレクションを不変にして外部に渡す
  9. 64 • オブジェクト指向プログラミングの3大要素 a. カプセル化 b. ポリモーフィズム c. 継承 •

    SOLID原則 • デザインパターン • ドメイン駆動設計 オブジェクト指向を使いこなす次のステップ
  10. 68 • カプセル化 • ポリモーフィズム ◦ 別々のクラスを同じように扱う • 継承 ◦

    同系統のクラスを分類する オブジェクト指向プログラミングの3大要素
  11. 69 保守性の高い設計の指針 1. 単一責任の原則 Single-responsibility principle 2. 開放閉鎖の原則 Open/closed principle

    3. リスコフの置換原則 Liskov substitution principle 4. インターフェース分離の原則 Interface segregation principle 5. 依存性逆転の原則 Dependency inversion principle SOLID原則
  12. 70 • ソフトウェア開発で頻出する設計のパターン集 ◦ Strategy パターン ◦ Builder パターン etc. •

    Iterator パターンが最も身近だと思う ◦ Javaの拡張 for 文(for (Foo foo : barList))は これで実装されている • Composite パターンもイメージしやすいかも ◦ ファイルシステムのフォルダとファイルの関係はこれ デザインパターン