【図解】「オブジェクト指向とは何か」をカレー作りに例えて分かりやすく解説!

エンジニア初心者・未経験者に限らず、Webに携わる人であれば、一度は聞いたことがあるであろう「オブジェクト指向」。

「考え方が観念的でよく分からない!」という人も多いのではないでしょうか。

そこで、今回は日本人が大好きなカレーに例えて、駆け出しエンジニアのまきおくんとベテランエンジニアのテク博士がオブジェクト指向を分かりやすく解説していきます!

オブジェクト指向とは?

まきお
テク博士、突然なのですが疑問が!
エンジニアの人ってみんな「オブジェクト指向」って言いますけど、なんでみんなオブジェクト指向にこだわっているんですか?
オブジェクト指向の何が良いのかが、いまいち分からなくて…!
テク博士
まきおくんも「オブジェクト指向」なんて言葉を知るようになったのかい!
簡単に言うと、オブジェクト指向とは、
  • 物事を分かりやすくまとめたり、整理整頓すること(オブジェクト(モノ)としてまとめる)
  • チームで開発する時には必須
  • みんなが心がけると仕組みを知らなくても機能を利用できるようになる
と言うものじゃ。具体的には継承とか、カプセル化とか・・

まきお
ちょっとテク博士、待って下さい。。
テク博士
おお、すまんの、ついオブジェクト指向の話になると熱くなってしまっての、、
まきお
熱くなった博士を見るのは初めてですね、でもオブジェクト指向を知ると面白そう!
テク博士
まずは分かりやすくオブジェクト指向が整理整頓というところをカレーの手順で説明するかの。

オブジェクト指向なカレー作りの手順

テク博士
突然だが、まきおくん。カレーの作り方は知っているかの?
まきお
まあ、大体分かりますよ。
テク博士
スーパーで材料を買ってからカレーが出来上がるまでを手順にすると、

  1. スーパーでカレールウ、じゃがいも、人参、玉ねぎ、豚肉こま切れを買う。
  2. じゃがいもは芽を取ってぶつ切り、人参は皮を向いてぶつ切り、玉ねぎはみじん切りにする。
  3. 鍋を温め、玉ねぎ、豚肉を炒め、次にじゃがいも、人参を入れて炒める。
  4. 水とカレールウを入れて煮込む。
  5. できあがり!
まきお
うん、そうですね。ポークカレー美味しそう。
テク博士
じゃあカレーの作り方をオブジェクト指向的に書くとどうなるか。

  1. スーパーで「カレーに必要なもの」を買う。
  2. 野菜を「カレーに合わせて」切る。
  3. カレーができるように」炒めたり煮込んだりする。
  4. できあがり!
まきお
え、「カレーに合わせて」ってまとめてますけど、どういうことですか?
カレーを作る手順として何をすれば良いかわからないんですが…
テク博士
でも、作る人がカレーの作り方を知っていれば、カレーは出来上がるんじゃないかの。
まきお
まあそうですね。分かっていれば作れますね。
テク博士
更にオブジェクト指向にしたカレーの作り方はこんな手順じゃ。

  1. カレーを作る
  2. できあがり!
まきお
もはや手順じゃないですね!「カレーを作る」って言ってるだけですよ!
テク博士
でも、作る人がカレーというオブジェクト(もの)を知っていれば、カレーは作れるんじゃ。
まきお
なるほど、ちょっと分かってきました!つまり「野菜の切り方、炒め方を知らなくても、カレーを知っていればカレーは作れる」ということですね?
テク博士
そう。
オブジェクト指向とは、カレーの作り方(仕組み)を知らなくとも、
カレーを知っている人に頼む(カレーを作る、というメソッドを呼び出す)ことでカレーは作ることができる
言い換えれば、複雑な仕組みを隠蔽して効率よく機能を利用できるようにすることなんじゃ。

チーム開発のためにオブジェクト指向が必要

テク博士
開発の現場におけるオブジェクト指向のメリットも説明するかの。

プログラムというものは複雑じゃ。いちいち機能の仕組みを理解しようとすると、開発がいつまでも終わらん
だから、プログラマーひとりひとりが自分プログラムを他の人が利用できるように、分かりやすくまとめているんじゃ。

まきお
な、なるほど…!
何か具体例とか無いでしょうか…!
テク博士
そうじゃな、例えば、Zipファイル。
本来、zipファイルもファイルを別の文字列で置換えてファイルサイズを小さくする複雑な仕組みがあるんじゃが、
みんなは「解凍」「圧縮」としてファイルを扱っていると思うんじゃ。

他には、システム開発する時も、

  • 注文を管理する機能
  • csvファイルをアップロードする機能

みたいに、機能でまとめて振り分けて、お互いが利用できるようにする。

システムが満たす機能を実現させるのは大変じゃ。
チームで開発するために、いちエンジニアとしてオブジェクト指向を学ぶのじゃ。

まきお
ありがとうございます!オブジェクト指向が何なのか、メリットを理解できました!
テク博士
うむ、それは良かった!少年よ大志を抱け!