#はじめに
先日面接させていただいた企業の面接官から、タイトルの質問を受けました。構造的に説明することができなかったので、オブジェクト指向についてまとめてみました。
#もしオブジェクトがなかったら
ドラクエのようなRPGで考える。
- 剣士1は、Aボタンで攻撃、Bボタンで守る
- 剣士2は、Aボタンで攻撃、Bボタンで守る
- 剣士3は、Aボタンで攻撃、Bボタンで守る
剣士が3種類程度なら、追加で「Cボタンで魔法を使う」という機能を付け加えても、変更に対応できるかもしれない。しかし、これが1万種類の剣士がいたら、一万行の変更を加えなくてはならない。
この時、あらかじめ「剣士」というモノを作成しておけば、変更に対応しやすくなる。上の例では、あらかじめ「剣士」というモノを作成しておき、Aボタンで攻撃、Bボタンで守るというようにしておく。
そうすれば、
- 剣士1は、「剣士」をコピーして、装備だけ木の棒にする
- 剣士2は、「剣士」をコピーして、装備だけ鋼の剣にする
- 剣士3は、「剣士」をコピーして、装備だけエクスカリバーにする
のようにできる。このようにして置けば、あとで「Cボタンで魔法を使う」という機能を追加する場合でも「剣士」というモノだけ変更すればよくなる。
#オブジェクト指向の基本的4用語
##1. オブジェクト
下で説明するクラス(設計図)をもとに作られた実物がオブジェクト(インスタンス)。例えば、剣士。
##2. クラス
オブジェクトの設計図のようなもの。プロパティ(属性)やメソッド(操作)をまとめたもの。
##3. プロパティ
オブジェクトが持っているデータ。剣士の例だと、HP・MPや装備がプロパティにあたる。
##4. メソッド
オブジェクトが持っている操作。剣士の例だと、攻撃する・守る・魔法を使うなどの、何らかのアクションを起こす処理のこと。
#オブジェクト指向のメリット
メリットは、大きく2点。
1.大人数での開発に適している
2.同じようなモノをすぐに作成できる
上の例で言うと、「剣士」というプログラムの中身は、作成者だけが知っていればよく、他のメンバーは「Aボタンで攻撃する、Bボタンで守る」という機能を持っているということだけ知っていればいい。(ちょうど、なぜテレビが映るのかがわからなくても、リモコンでチャンネルを変えられるように)
また、「魔法使い」をゲームに登場させようとするとき、「Aボタンで攻撃する、Bボタンで守る」という機能は剣士と共通にすればよく、「剣士」というモノを再利用して「魔法使い」を作れば効率的に開発できる。
#おわりに
自分なりにオブジェクト指向についてまとめてみました。ふわふわした理解ですが、これからもっと勉強しつつ、理解を深めていきたいです。