オブジェクト指向について後輩に質問されて、解説してたら興が乗ったのでブログ記事としてまとめてみる。
オブジェクト指向で必要なのはキーワードは6つだけ!
- オブジェクト
- クラス
- メッセージ
- 継承
- カプセル化
- ポリモーフィズム
オブジェクト指向は雰囲気を掴めば勝ちです
##まずは各キーワードのざっくりした説明
###オブジェクト ものとか ひととか 概念とか。オブジェクト指向の基本単位。
###クラス 共通の性質を持つもの。Twitterでいう「クラスタ」とほぼ同義だと考えていいよ。「ほ乳類クラスタ」とか「艦これクラスタ」とか「のんのん難民クラスタ」みたいな。
###継承 クラスタの包括関係のこと。「のんのん難民クラスタ」も「ごちうさぴょんぴょんクラスタ」も「深夜アニメクラスタ」に入りますよね。なので、「深夜アニメクラスタ」の性質を「のんのん難民クラスタ」と「ごちうさぴょんぴょんクラスタ」は持っているはず!というのが継承。「のんのん難民クラスタ」は「深夜アニメクラスタ」を継承した、とかいいます。
###メッセージ 関数呼び出しみたいなの。あるオブジェクトから別のオブジェクトに「この仕事やってくれ」と伝えること
###カプセル化 みんなが「このオブジェクトはこの仕事をやってくれる。どうやってやるのかは知らないけど」と思うこと。
###ポリフォーリズム このクラスを継承した人は「***」機能を持ってるよ。「***」の仕方は、人それぞれだけど。みたいなこと。
##で、オブジェクト指向だと何がうれしいのか 一番うれしいのはプログラムの書き換えが楽になること。 キモになるのは、カプセル化とポリフォーズム。
カプセル化の例だと、質問相手がどういうアルゴリズムで仕事を行っているのかを考えなくても、聞けば答えてくれる。
ポリフォーズムの絵の例だと、同じクラスタの人であれば質問相手を変えても答えてくれる。
つまり、命令のぶん投げとか、命令相手のとっかえとかが簡単にできるのがオブジェクト指向なのです!
個々のオブジェクトを擬人化して、オブジェクト達がどういう風に動いていくのか、を考えながら設計するとオブジェクト指向っぽい感じになると思います。