オブジェクト指向のメリットとは!?編
[登場人物]
プログラミングを教える先生。技術一筋で説明は少し苦手のようだ
[オブジェクト指向のメリットについての話]
- - -
[オブジェクト指向用語の説明]
抽象クラス/インターフェース
アクセル、ブレーキ、ハンドルで操作できるという特徴を定義するためのもの。
抽象クラスとインターフェースで実現できることは同じですが、使い分けるにはニュアンスの違いを理解する必要があります。
抽象クラスは概念としてモノがイメージできるものでなければなりませんが、インターフェースはモノではなく機能/操作だけを定義するものです。
車の例で言うと、
抽象クラス:車というモノ。車に共通する特徴を持つクラス。でも実際に実在する車のことではないので抽象概念となる。
インターフェース:アクセル、ブレーキ、ハンドルで操作できる何かという感じ。車以外にも同じ操作方法で操作できるものがあれば、同じインターフェースを実装する仲間と言える。
よく分からなければ、まずは同じようなものだと理解しておけば良いと思います。
具象クラス
アクセル、ブレーキ、ハンドルで操作できる実際のモノを定義するためのもの。
具象クラスとは、抽象クラスから派生したクラス、またはインターフェースを実装したクラスを指します。
車の例で言うと、
プリウス、スカイライン、インプレッサなど実際の車種を表します。
継承
抽象クラス/インターフェースと具象クラスの関係性を定義するためのもの。
継承している関係が、親子関係に似ているので、親クラス-子クラスと言われたり、基本クラス-派生クラスと言われたりします。
親クラスや基本クラスは抽象クラスでない場合もあるので、厳密には少しニュアンスが違います。
車の例で言うと、
車という概念と、プリウス、スカイライン、インプレッサという実際の車種の関係性を表します。
ポリモーフィズム
車の車種が変わろうとも運転できますよということを定義するためのもの。
車種ごとの微妙な違いを上手く隠してくれる仕組みとでも言うんでしょうか。
具象クラスの違いを他のクラスへ伝搬させないようにする仕組み。
車の例で言うと、
プリウス、スカイライン、インプレッサと乗る車種が変わっても、運転手は免許を取り直す必要がないということを表します。