オブジェクト指向って説明が難しいですね。どうやったら理解できるか一晩考えたら、キャバクラに例えるのが面白そうなのでチャレンジしてみます。
何かに例えると分かりやすい
数年前SEOを恋愛に例えて、モテたきゃ出会い系や街コンでチャンスを増やすために金かけろと遠回しに言ったブログを書いたことがあります。
また合コンをABテストに例えてコンバージョン上げる方法をブログ化したこともありました。
一部の層からひんしゅくをかいつつ、概ね面白くて分かりやすかったとのご意見をいただきました。
オブジェクト指向プログラミングを何かに例えてみたい!
オブジェクト指向の説明はとても難しいです。よく車に例えた例を見ますが、とにかく頭に入ってこない。ポリモーフィズム(多様性)とか拒絶反応出ちゃう名前出すのやめて欲しい。
何に例えたら頭に入るんだろうと悩んでおりました。
実は激白すると以前、
ボーナスが出ない腹いせに熟女キャバクラでバイトしたことがあります。
大切なことなので二度言います。
ボーナスが出ない腹いせに熟女キャバクラでバイトしたことがあります。
どんな経験も無駄にはなりませんね。昨晩、店長とキャバ嬢の関係性がオブジェクト指向に近いんじゃね?!とピコーーンと思いつきました。
なので遠慮なくキャバクラに例えてみることにしました。
オブジェクト指向がなぜキャバクラなのか
キャバの店長の教育通りにすると、それなりにキャバ嬢が稼げるようになる
キャバクラといえば見た目やスタイルが大切と思いますが、そんなことないです。
顔がポンコツ(悪口)でも稼ぐキャバ嬢はいます。
オブジェクト指向プログラミングは店長の教育に似ています。
たとえ顔がポンコツ(悪口)でも、いくつか決まり切った対応をすれば顧客は満足してお金を落としてくれるようになります。
クラスとは?
キャバクラでいう店長の作ったマニュアル
この教育のセットがいわゆるオブジェクト指向プログラミングでいう「クラス」に当たります。
クラスというものはキャバクラでいう売れるキャバ嬢になるための「お客様対応マニュアル」みたいなものです。
以下のような感じで、売れるための対応がセットになっています。
class 店長の教育{
連絡先を聞く
{
//処理
}
お酒を作る
{
//処理
}
延長させる
{
//処理
}
ねだる
{
//処理
}
お酒を作る
{
//処理
}
延長させる
{
//処理
}
ねだる
{
//処理
}
}
インスタンスとは?
マニュアルに従うキャバ嬢を育成
クラスとはキャバクラの店長が編み出した売れるキャバ嬢になるためのお客様対応マニュアルと例えました。店長はマニュアルに従うキャバ嬢を育成します。
マニュアルを伝授して実行するのが新人キャバ嬢で、これをオブジェクト指向ではインスタンスと呼びます。
$キャバ嬢 = new 店長の教育();
$キャバ嬢2 = new 店長の教育();
$キャバ嬢3 = new 店長の教育();
これで店長の教育通りに仕事をするキャバ嬢(インスタンス)が量産されるわけです。
メソッドとは?
キャバ嬢が店長から伝授された売り上げをあげるための手段
キャバ嬢が連絡先を聞くのも、食事に行きたがるのも別にあなたに気があるわけではありません。リピートを取る、つまり売り上げをあげるためです。
これも彼女たちは言いたくて言っているわけではありません。目的のために用意されたマニュアルを実行しているだけです。
- 褒めたり気分を良くさせる
- 何かねだる
このようにあらかじめ用意された一連のタスクをオブジェクト指向ではメソッドと呼びます。
店長の教育からねだるというメソッドを実行するだけです。
ねだる(何か){
褒める、もしくは気分を良くさせる処理
return 何かねだる
}
「何」(引数)をねだるのかはお客さんによって変わります。
オブジェクト指向プログラミングではクラスからメソッドを取り出し実行できます。
$キャバ嬢->ねだる(シャンパン);
ちなみにクラスからはメソッド(関数)だけではなくプロパティ(変数)を呼び出すこともできます。
オブジェクト指向の三大要素って?
売れているキャバ嬢の資質?
オブジェクト指向には三大要素というものがあります。
- カプセル化
- ポリモーフィズム(多様性)
- 継承
カプセル化とは?
なんでシャンパンオーダーしちゃったのか思い出せる?
みなさん、もしキャバクラに行ってうっかりシャンパンオーダーしてしまった翌日、理由って思い出せますか?
キャバ嬢が可愛かったから?それとも気が大きくなっちゃったから?
多分細かいことはきっと思い出せないでしょう。
キャバ嬢はお客さんが気分良くなるような行動を店長から教えられ(メソッド)、プログラムが機械的に処理する如くやってるだけです。
残念ながらあなたに好意があるわけではありません(キリッ)。
むしろ、やっていることがバレては夢がなくなり困ります。
こう言った隠しておきたい処理のことをカプセル化と言います。
実はキャバ嬢は綿密なテクニックを皆さんにバレないように実行しているのです。
なので細かい処理は隠しちゃいますwww
class 店長の教育{
protected おねだり() {
細かい処理
}
}$キャバ嬢 = new 店長の教育();
$キャバ嬢->おねだり(シャンパン);
//ここでは何をどうしたらこうなったか確認できない
どんな処理をしているかは確認できないですが、お客さんはいつの間にかシャンパンを開けてしまっているわけです。
オブジェクト指向ではこのような複雑かつ長い処理で見せなくても、もしくは見せたくないものなどを隠しておくことができます。
ポリモーフィズム(多様性)
シャンパンを開けるか、プレゼントをもらうか
プログラムでは同じ処理を使いたい時、書き換えないといけないことがあります。でも、似たようなコード書くのやだし手間だしもったいないですよね?
ちなみにキャバ嬢の行動に置き換えることもできます。
シャンパン開けて欲しかったけどこのお客さん無理そうだからなんか別のもの買ってもらおう。
プログラムでは、漠然としたものを抽象化(目的などを変えることができる)して実装することができます。処理や原理は一緒だけど目的などを変えることができます。
このように柔軟に処理を行うことをポリモーフィズム(多様性)と言います。
お客さんAに対して
$キャバ嬢->ねだる(シャンパン);
お客さんBに対して
$キャバ嬢->ねだる(シャネルのバッグ);
ポリモーフィズムの良さは振る舞いをケースバイケースで変えられるといったところでしょうか?
継承
キャバ嬢がお店を変わることになった場合
店舗の都合で移動を余儀無くされることもあります。
同じ系列店のキャバの店長でもそれぞれ教育ポリシーが違うことがあります。
最初にいた店長から教わったテクニックを引き継ぎつつ、新しい店長のテクニックを使うこともできます。
オブジェクト指向でいう継承です。
前の店長の教育を引き継ぎつつ新しい教育を取得することができます。
- お酒を作る
- 延長させる
- ねだる
class 前の店長の教育 extends 新しい店長の教育{
マンションを買わせる
{
//処理
}
}
上記仮説とはいえ、むしろそのメソッド持っている店長いるなら教えてくれ!!
まとめ
いかがだったでしょうか?今回はオブジェクト指向プログラミングを無理くりキャバクラに例えてみました。
めんどくさいゴタクを並べましたが、オブジェクト指向で一番ステキだと思うのは使い回しできるということだと思います。エコロジー!
最初から頭でっかちに理解することに注力するより、とりあえずやってみて動かして感動してみてはいかがでしょう?
理解していなくても仕事できる人は山のようにいますから^ ^
二、三回コード書いてオブジェクト指向ナンジャラホイ?って記事読んでみた方が多分「なるへそーっそういうことか」ってなります。
最後までお読みいただきありがとうございました。

神守 由理子/フロントエンドエンジニア