「オブジェクト指向」という概念を知っていますか。
聞いたことがある方もいるかもしれませんが、理解していて、説明できるという方はあまり多くないのではないでしょうか。
オブジェクト指向の概念や方法を認識して、 プログラマーとして一歩上に行っちゃいましょう。
・オブジェクト指向についてザックリ知りたい人
・効率的にプログラムしたい人
・仕事ができるようになりたい人
オブジェクト指向って
オブジェクト指向というのは、「プログラミングをするときの考え方」の1種です。
では、どんな考え方なのか、言葉の意味から、そのメリットまで簡単に解説します。
オブジェクトとは
オブジェクトっていうのはプログラミングにおいて、「性質と動作をひと固まりにしたもの」です。
例えば、人間というオブジェクトがあったら、身長、年齢、足の速さなどの性質と、食べる、考える、走るなどの動作を集めて構成します。
「なぜ性質と動作を固まりにするか」というと、その方がプログラムするときに便利だからです。
指向ってどういう意味?
この「指向」という言葉がわかりづらくしてると思うので、解説します。
指向は、orientedの日本語訳で、
orientedとは、「何かを優先して考える」ようなイメージです。
- child-orientedなら子供優先で子供向け。
- self-orientedなら自分優先で自己中心的という意味です。
ですので、object-orientedは、
オブジェクトを優先して考えていく、オブジェクトをベースに考えていくということです。
オブジェクト指向のメリット
オブジェクト指向で書くと、ある性質と動作の固まりごとにプログラムを分けて作っていくことになる。それによって、以下のようなメリットがあります。
- 量産やカスタマイズしやすくなる
- プログラムが分業や理解しやすくなる
- メンテナンスしやすくなる
これらは、開発が大規模になればなるほど重要になります。
将来大きなサービスを作ってみたい、作っている会社に就職したいという人は、是非身に着けておきましょう。
オブジェクト指向の基本的な3つの考え方
オブジェクト指向には、以下のような基本的な考え方があります。
- カプセル化
- 継承
- ポリモーフィズム
それぞれについてザックリ説明すると、
- 内部がどうなっているか外側から見えなくすること
- 共通の機能を他のオブジェクトでも使うこと
- 共通部分を変えて、他でも使えうこと
ということです。
これから、それぞれが「どういうことなのか」、「どんなメリットがあるのか」について説明していきます。
カプセル化とは
カプセル化とは、「オブジェクトの中身を極力外側から見えなくする」ことです。
カプセル化は、私たちの身の回りの製品を見てみると、分かりやすいです。
例えば「車」という製品を使う際のことを考えてみてください。
私たちは、車の内部のエンジンとか、モーターとかがどうなっているか全く知りません。
しかし、「アクセルを踏む」という動作によって、簡単に車を動かすことができます。

上はあくまで車という製品での話ですが、このように「必要なものだけを公開し、内部情報をなるべく非公開にする仕組み」をオブジェクトを作るときに適用したのがカプセル化です。
カプセル化のメリット
カプセル化を行うことで、そのオブジェクトが他のオブジェクトから干渉されなくなります。
そのためカプセル化には、
- 内部を気にせず使えるから、使いやすい
- 内部のデータに外側から干渉しない
- コードが局所化されるため理解しやすい
といったメリットがあります。
継承とは
継承とは、「あるオブジェクトと共通部分を持つオブジェクトを作りたいときに、共通部分を再利用すること」です。
例えば、「車」というオブジェクトに加えて、さらに「救急車」というオブジェクトを作りたいとします。
この時、車と救急車は共通部分を持ちますよね。
ですので、車の「スピード」、「サイズ」、「アクセル」、「ブレーキ」といった共通部分を利用しながら、救急車の「サイレン」といった機能を追加することで作れます。

この時、「救急車を車を継承して作った」ということになります。
継承のメリット
上の例のように、共通部分を再利用することで、
- コーディングの手間を省ける
- 再利用することで、他のものに拡張がしやすい
- コードが冗長でなくなり、読みやすくなる
といったメリットがあります。
しかし共通部分を持っているからと言って、何でもかんでも継承する必要はないです。
Is-a関係と言う「A is a B」のような関係になっているときには、Bを継承して、Aを作ることが可能です。

上の例だと、「救急車 is a 車」の関係になっているから、
車を継承して、救急車を作れたんだよ。
ポリモーフィズムとは
ポリモーフィズムとは、「継承された親の動作を、継承した子が利用したときに、その子、固有の動きをすること」を言います。
例えば、「車」を継承して、「救急車」のほかに、「スポーツカー」、「バス」などを作ったとします。
この時、「車」が持っていた「アクセル」という動作を、それぞれの子は引き継いでいます。
それぞれの子に対して、アクセルという動作命令をすると、どれも異なる固有の動作をするように設計します。
具体的には、「スピード」や「燃費」などが別々の値になるようにします。

こういう風に「継承して作った子オブジェクトたちが、同一の動作で別の動きをすること」をポリモーフィズムと言います。

ポリモーフィズムは多態性と訳されます。子のオブジェクトの動きが1つだけにならず、「様々な形をとること」を表しています。
ポリモーフィズムのメリット
ポリモーフィズムを満たすように実装することで、
- 個別でなく、一括に動作させられてラク
- コードが読みやすい
といったメリットがあります。
別々の動作命令を一つ一つ用意していたら、大変だし、読みづらいですよね。
実際にコーディングすれば、有用性がわかると思います!
まとめ
皆さんお疲れさまでした。
最後に、オブジェクト指向について振り返ってみようと思います。
振り返り
- オブジェクト指向は、「プログラミングをするときの考え方」
- カプセル化、継承、ポリモーフィズムが3大要素がある
- カプセル化は、内側を外から見えなくすること
- 継承は、共通部分の再利用
- ポリモーフィズムは、同じ命令で固有の動きをさせること
これだけ分かってれば、基本的な概念に関してはバッチリです。
ひろゆきより賢い!
これは余談ですが、ひろゆきさんは生配信でオブジェクト指向を「知ったか」しました。
勘違いしたのかもしれませんが、恐らく知らないんですよ。
皆さん理解できれば、プログラマーの資質アリですよ!
因みに、ひろゆきさんの「知ったか集」はこちら
注意
オブジェクト指向プログラミングは、人によって定義や見解が分かれています。
今回紹介したのは、あくまで私なりの解釈になります。
プログラミング言語によっては、私がオブジェクトと呼んでいたものを「クラス」に置き換えるのが正しいかもしれません。
また、至らない点がありましたらご指摘ください。
コメント