オブジェクト指向ってなんすか?って人のためにわかりやすく説明します

オブジェクト指向という概念は

プログラミングでつまづくポイントランキング第1位

であり、かつ

プログラミングでよくわからないモンドセレクション金賞受賞している

頑張って噛み砕いて説明していきたい。

 

この記事の内容

この記事では、

  • オブジェクトって要は「データと命令をセットにした物」だということを簡単な具体例を通して理解します。
  • オブジェクト指向の3大機能「カプセル化」「継承」「ポリモーフィズム」を説明します。
  • オブジェクト指向を理解する上で、様々な専門用語が出るのでその都度解説します。

オブジェクト指向はRPGの例がわかりやすい

オブジェクト指向の”オブジェクト”とは、「データと命令をセットにした物」と思えば良い。

RPGで言うと、

 

RPGで言うオブジェクト

データ= 名前、レベル、HP、MP、必殺技の威力

命令 =

  • 歩く();
  • 逃げる();
  • 居合斬り();
  • 盾で防ぐ();


これら1つ1つをオブジェクトと考えます。

こうしてまるで現実世界のようにたくさんのオブジェクトがあると考える、モデル化することで

プログラムは書きやすくなります。

 

ちなみに僕が例であげた”データ”と”命令”

これらはプログラミング用語でそれぞれ”プロパティ”と”メソッド”と言います。

またこのデータと命令がセットになったプログラムコードのこと”クラス”と言います

ではなぜプログラムが書きやすくなるか?

それは戦闘シーンの例で理解しましょう。

従来のプログラム
従来のプログラムだと、
プログラムを書く人の神の視点からの記述になっていました。

  1. カカロットにかめはめ波を打たせる
  2. カカロットのMPを10減らす
  3. フリーザに100のダメージを与える
  4. フリーザの体力を0にする
  5. フリーザに「助けてくれえええええ」と命乞いさせる

と全ての登場人物の行動を記述していました。
これは非常に大変な作業です。

オブジェクト指向のプログラム

しかしオブジェクト指向だと
①カカロットよ、フリーザにかめはめ波を打て
(プログラミング的に書けば“かめはめ波(フリーザ);”

なんとこれだけで終わりです。

なぜならば、

かめはめ波を打ったらどうなるか、かめはめ波が当たればどうなるか、HPが0になったらどうなるかが全てオブジェクト内のメソッドに詳しく記述されているからです。

こういう感じです。

かめはめ波関数が呼び出された時に、

①自分のMPが10減る命令と②相手に100ダメージ与える命令がなされます。

命乞い関数は定期的に呼び出してチェックするとします。

かめはめ波関数が呼び出された時、フリーザの体力がちょうど0になるので、

命乞い関数の条件分岐がいつもと変わります。

最終的にif文の中のspeak関数が呼び出され、フリーザは「助けてくれえ」と声を出します。

 

これら一連の流れをプログラムをはかめはめ波関数たった1つ書くだけで再現できます。

めっちゃ便利ですよね!!

まとめですが、オブジェクト指向とは現実世界のモデル化

人間の全ての行動が神様によって記述されているとは考えにくいじゃないですか。

人間個人個人が意思を持って生きています。

「こうされたらこうする」

とルール、意思を持っています。

オブジェクト指向の概念はそれに近いです!!

オブジェクト指向の3大機能

オブジェクト指向が備えている3つの機能があります。

この3大機能があるおかげで、ものすごい力を発揮します。

カプセル化

カプセル化とは、重要なデータをオブジェクトの中に閉じ込めて、

外から干渉されないようにする仕組みのことである。

例えば、会員登録をするとき会員情報が1つのオブジェクトとなり

その中にID、パスワード、氏名、住所などのプロパティが入る。

これらは外から奪われたり、アクセスされてはいけません。

だからカプセル化は重要です。

 

継承

 

あるクラスの機能を引き継ぐ仕組みのことです。

 

継承の仕組み

例えば、孫悟空というクラスがある。しかしスーパーサイヤ人孫悟空というクラスが作りたい時

孫悟空クラスと内容はほぼ変わりません。

せいぜい髪色を金髪になる、”瞬間移動かめはめ波”という技が増える

ぐらいです。違う点は。

継承という仕組みでは、この違う部分だけを書き足せばいいので非常に楽です。

 

多様性(ポリモーフィズム)

ポリモーフィズムとは同じ命令を送っても、クラス同士で異なる振る舞いをすることです。

例えば、日本人のクラスがあって、「こんにちわ」と話す関数をこんにちわ();としましょう。

中国人のクラスにも、「ニーハオ」と話す関数をニーハオ();とします。

このやり方では、全人種の人に一斉に挨拶してほしい時、わざわざHello();ニーハオ();、、、とたくさんプログラムを打ち込まないといけません。

そうではなく、人間クラスという親クラスを作り、Hello();関数を設定し中身は空っぽにします。

そして日本クラス、中国クラス、韓国クラス、、と実装すれば、

Hello();関数を呼んだ時、全ての人種が挨拶を返してくれます。

これが振る舞いの違い、多様性、つまりポリモーフィズムです。

以上です。

今回はプログラミングの具体的な話は一切ありません。

具体例を通してオブジェクト指向のイメージを掴んでもらうことを目的としました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です