就職対策Vo.096~そもそも、なぜ、オブジェクト指向でつくるのか?
キャリアコンサルタントのサイトウです。今回は、オブジェクト指向でなぜ作るのかについて記載いたします。
オブジェクト指向とは、プログラミングをする上でなくてはならない概念です。
プログラミングをする上で避けては通れませんが、意味を理解するのが難しいでしょう。
先輩エンジニアから、こんな表現で言われたとします。
・モノとして考える
・現実世界と一緒
・車を例に挙げてみる
と言われても分からないものは分かりませんよね。。。
では、オブジェクト指向とはいったいどんな考え方なのか?
オブジェクト指向のイメージを掴んでもらえるように、できるだけ簡単に説明していきましょう。
●オブジェクト指向に明確な説明はない
まず、はじめに理解しておきたいことがあります。
オブジェクト指向は「概念」だ、ということです。
概念という言葉自体も難しいですが、何となく意味は分かりますよね。
物事や対象を丸ごとひっくるめて見たときの大まかな理解のことです。
分かりやすい例ですと、「愛」や「国家」などです。
なんとなく意味はわかっても、人それぞれ解答が違いますよね。
時代や国によっても答えは違うと思います。
オブジェクト指向もこのように曖昧なものだと思ってください。
愛や国家ほど漠然としたものではありませんが、人によって「どこが本質か?」「何が正しい説明か?」が違ってきます。
●だから、オブジェクト指向は難しく感じる
オブジェクト指向について説明している技術書やWebサイトは数多く存在しますが、どの説明もバラバラだと言えます。
言葉も無駄に難しいと感じませんか?
語っている本人たちは理解して語っているが、読んでいる初心者には、なかなか理解できませんよね。
あるサイトでオブジェクト指向について調べてなんとなく理解できたようでも、別のサイトを見て説明が違っている場合、理解したと思っていたことが本当に正しいかどうか分からなくなりますよね。
実際のところ、エンジニアを10年、20年やっていても、どこが本質か?の答えはエンジニアによって違ってきます。
このように、明確な答えがないのですから、ざっくり雰囲気を理解しておけばいいのです。
100%理解しようとすると良く分からなくなります。
「なんとなくこんな感じかな?」くらいの理解で大丈夫です。
あとは自分の成長と共に、理解が進んでいきますし、自分の中で定義ができるようになっていくでしょう!
●オブジェクト指向とは?
【オブジェクト指向は対象を操作するイメージ】
オブジェクト指向プログラミングとは、プログラムを手順ではなくて、モノの作成と操作として見る考え方です。
オブジェクトとは「モノ」を意味します。
あなたは、「テレビ」というモノを操作する際、中でどういうプログラムが動いているか知る必要はないですよね。
そうです、リモコンで操作すれば、動きます。
「モノ」を作りましょう」そして、「モノ」を使いましょうというのがオブジェクト指向という考え方だと思っていいでしょう。
では、なぜモノを作っておくと便利なのでしょうか?
【大変な作業を無くす】
プログラムというのは上から順番に動作手順を書いていけばとりあえずは動きます。
しかし、場合によっては大変なこともあります。
分かりやすく、レーシングゲームで想像してみましょう。
・○○車はAボタンを押すと走り、Bボタンを押すと止まる
・△△車はAボタンを押すと走り、Bボタンを押すと止まる
・□□車はAボタンを押すと走り、Bボタンを押すと止まる
このように、それぞれプログラミングしてもいいですが、1万種類車種があったらどうでしょうか?
このプログラミング担当者は、とても大変ですよね。
なんとかこなしても、途中でPMが「やっぱりCボタンを押したらバックする機能を追加しよう!」と言い出したらどうだろうか?
1万個のプログラムを全部書き換えることになってしまい、絶望を感じるでしょう。
そうならないために、「車」というモノをはじめから定義しておいて、それを使ったほうが楽なのです。
「車」というモノを先に作っておいて、Aボタンを押すと走る。Bボタンを押すと止まるようにしておきます。
・○○車は「車」をコピーして外装の色だけ赤にする
・△△車は「車」をコピーして外装の色だけ青にする
・□□車は「車」をコピーして外装の色だけ緑にする
こうしておけば、「Cボタンでバック」という機能を追加するときは、「車」のプログラムだけを変更すればいいですよね。
【大人数で開発するときに便利】
「車」というモノを用意しておけば、大人数で開発するときにも便利です。
「車」というプログラムは、作成者だけが中身を知っていればよくて、他の人は「Aボタンを押すと走り、Bボタンを押すと止まる」ということだけ知っておけばいいことになります。
手順を全部書いたプログラムだとすると、他のプログラマーも中身を理解していないといけません。
下手したらプログラムを壊してしまうかもしれないからです。
モノを用意して、それを他の人が触れないようにしておけば、他の人がプログラムを壊してしまう心配がなくなりますよね。
【同じようなモノを作りやすい】
レーシングカーにトラックを登場させるとします。
「Aボタンを押すと走り、Bボタンを押すと止まる」という機能は車と一緒です。
この機能は再利用すべきです。
これもオブジェクト指向の考え方です。
すでにあるモノをうまく使い、加工したモノを作れば効率は良くなります。
●オブジェクト指向の基本用語解説
オブジェクト指向には基本となる用語があります。
これらはすべて理解して覚えておきたい用語です。
【オブジェクト(object)】
オブジェクトは、オブジェクト指向の根本です。
オブジェクトとは「対象」「物」という意味で、プログラミングにおいてはデータと処理の集まりを意味しています。
【クラス(class)】
クラスとはオブジェクトの設計書のようなもので、オブジェクトの中のプロパティやメソッドをひとまとめにしたものです。
【プロパティ(property)】
オブジェクトが持っているデータのことをプロパティ(属性)と言います。
【メソッド(method)】
メソッド(操作)とは、オブジェクトが持っている処理のことです。
【インスタンス化(instance)】
インスタンスとは「実体」「事例」という意味で、プログラムでオブジェクトを実際に使う時に生み出されるものです。
設計図からオブジェクトを作ることをインスタンス化と呼びます。
【カプセル化】
オブジェクトが持つデータや処理のうち、別のオブジェクトから直接利用される必要のないものを隠すことを言い、利用する場合は外部から操作するために作られた処理を設けることを言います。
カプセル化することで、プログラムが壊れにくくなり、大人数で開発をする際、すべてのコードを認識する必要がなくなります。
【継承】
特定のオブジェクトの機能を引き継いで使うことを継承と言います。
似たようなオブジェクトを複数作る時に、全てのプロパティやメソッドを、その都度プログラミングするのは非常に手間が掛かるが、継承を使うことにより、同じ機能を実装できます。
【ポリモーフィズム】
ポリモーフィズムもオブジェクト指向プログラミングの基本性質です。
クラスによって同一のメソッドで異なる処理が行えるという性質をポリモーフィズムといいます。
オブジェクト指向の基本について、できるだけ分かりやすく紹介しましたが、少しでも理解できましたでしょうか?
まずはイメージだけでも掴むことが大事です。
また、ここで紹介した内容がオブジェクト指向の全てではないので、理解するには更に知識を深める必要があります。
理解するためには、技術書などを読んでみるだけではなく、実際にプログラミングをしながら理解すると、より深まることでしょう。