本記事の概要
参考URLに良いまとめがあったので、自分用のメモとして抜粋させて頂きました。
オブジェクト指向の特徴
- 継承
- カプセル化
- ポリモーフィズム (多態性)
継承
継承の本質はインターフェイスです。
継承は機能を受け継ぐためのものではありません。継承の本質は、犬や猫を「動物」という抽象概念としてまとめ上げられるインターフェイスなのです。
継承は親クラスの機能を受け継ぎますが、これは開発効率を上げるための優しさ的仕様であり、継承の本質はインターフェイスなのです。
継承を親クラスの機能を受け継ぐ目的で使って、失敗した記憶があります。
継承をインターフェースとして捉えて、抽象概念の抽出という目的で使うのが大切なようです。
カプセル化
カプセル化は、外から見てそのものが複雑でない状態を作るということ
クラスの役割は一つにする
これはクラスの利用者とクラスとの接点で、意識するべきところを理解しやすくするためかなと考えています。
ポリモーフィズム (多態性)
ポリモーフィズムはそのインターフェイス(抽象)に対してプログラムするということです
ここで衝撃的な事実をお伝えしましょう!実は「new」は具象です!ですから、ポリモーフィズムを意識する上でnewの扱いには最大限の注意を払う必要があります。
ポリモーフィズムは自分の中でしっくり来ていなかったのですが、腑に落ちた気がします。
デザインパターンでオブジェクトの生成と利用を分けているものがある理由もそこにあるのかもしれません。
(Factory Method パターンとか)
まとめ
自信を持って、クラス設計がしていけるように上記を頭に入れてやっていきたいと思います。