面接官「『オブジェクト指向』について説明してください。」僕「…」


はじめに

先日面接させていただいた企業の面接官から、タイトルの質問を受けました。構造的に説明することができなかったので、オブジェクト指向についてまとめてみました。

もしオブジェクトがなかったら

ドラクエのような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ボタンで守る」という機能は剣士と共通にすればよく、「剣士」というモノを再利用して「魔法使い」を作れば効率的に開発できる。

おわりに

自分なりにオブジェクト指向についてまとめてみました。ふわふわした理解ですが、これからもっと勉強しつつ、理解を深めていきたいです。