オブジェクト指向設計分析の感想
Head First オブジェクト指向設計分析が読み終わったので感想。
オブジェクト指向について復習したかったので、読みました。 いままでJavaでアプリを作成してきましたが、 なんとなくで作成したり、 オブジェクト指向の原則を網羅する機会がなかったりしました。
大学でもオブジェクト指向設計概論とかあった気がしますけど…
なんか設問に対して、ポリモーフィズムとかインターフェイスとか穴埋めしていけば合格もらえた感じだった気がします…w
前職では、クラス設計がひどいソースを渡されて保守させられたり、 社内でも理解していない人がいたりでした。
そこで、基礎から勉強しなおそうかなと思い手に取りました。
この本を手に取った理由は著者紹介です。
Brett McLaughlin はギター奏者だが演奏してもお金がもらえない事に苦しんでいる。 しかし、最近になってプログラミング技術を向上させる書籍を書けばお金がもらえることに気づいた。
という感じのジョークから始まる。 このジョークに惹かれて買いました。 こんなフランクな感じですが、O'REILLYです。
内容としては、図や記号などが多くわかりやすいのですが、 若干回りくどいかな?と感じました。
恐らく業務での開発経験や失敗経験がない人でも分かるように例を用意しているのでしょう。
一番大事なのは設計の原則を述べている8章の内容でしょう。
ということで簡単に8章の内容をまとめたいと思います。
8章まとめ
開放閉鎖原則 (OCP: Open-Closed Principle)
クラスは拡張に開放され、修正に閉鎖されるべき。
- 機能をクラス内に留めることで、修正時に他に影響がないようにする
- 機能を拡張したい場合は、クラスを継承し、オーバライドする
繰り返し禁止原則 (DRY: Don’t Repeat Yourself)
共通する事柄を抽出し、一箇所にまとめることでコードの重複を防ぐ。
- クラスと機能を意味のある状態に保つために必要
- システムの分割方法を最適化することにも繋がる
単一責任原則 (SRP: Single Responsibility Principle)
オブジェクトは単一の責任を負い、サービスは単一の責任を遂行する。
- オブジェクトが行うあのは一つの責任
- あるオブジェクトの変更理由が1つしかなければ単一責任原則が実装できている
その他にも [クラス名]は自分自身を[メソッド名]する。 という文章が成り立つ場合は良いが、成り立たない場合は他のクラスに移動すべき。
例)
○自動車は自分自身を発進する
×自動車は自分自身を洗車する → メンテナンスは別クラスの仕事
リスコフ置き換え原則 (LSP: Liskov Substitution Principle)
サブタイプは基底タイプと置き換え可能でなければならない。
- 置き換えできない場合は移譲、コンポジション、集約を使う
8章以外
インターフェイスに対して実装を行う
これにより新しいオブジェクト、クラスに対しての拡張性が増すため。
テストを意識する
ユニットテストなどができるようにする。
というのもありました。
オブジェクト指向を見直したい方にはおすすめです。 少し高いですが…。
関係ないですけど、明日から新しい会社にジョインしPHPerになります。
ちょっと不安ですが頑張ろうとおもいます。