問題領域にあるオブジェクトを発見し、それぞれのオブジェクトの特徴を探るというところまで、できるようになったわけです。
で、今回はオブジェクトの背後にあるものに迫ります!
オブジェクトの背後にある「クラス」とはなにか?
ちょっと哲学風味。
コンテンツ
カレーってなに?
カレーといえば、これはもうたいていの人が作れる簡単料理の一つですね。美味いかマズいかを別にすれば、独身男性にだって作れますね。
それでいて、本当においしいカレーを作るとなると、これが奥が深い。
インドカレー、欧風カレー、アジアンカレー、さらに最近ではスープカレーなんてのもあって、種類もさまざま。
さて、そこで問題。
「カレー」とはなんでしょう?
新宿西口電気街にある「ボンベイ」という店で出してるカレー、あれはもちろん「カレー」です。
今、あなたが「S&B ゴールデンカレー」でカレーを作ったとすれば、それももちろん「カレー」です。
しかし、もしあなたが「やっぱり、あっさりしたものが食べたい」と思ってそうめんを茹でたとすれば、それは「そうめん」であって、カレーではありません。
ものすごく当たり前のことですね。
でも、どれがカレーでどれがカレーでないのかというのは、何で決まるのでしょう?
それは、店で食べるカレーとあなたが作ったカレーの共通点のはずですよね。
しかも、そうめんみたいな他の食べ物とは共通しないもの。
それによって、あなたはカレーと他のものを区別してるはずです。
- 色ですか?
いやいや、グリーンカレーやホワイトカレーなんてのもありますよね。 - 辛いことですか?
じゃあ、「カレーの王子様」はカレーじゃない? - ルーがあることですか?
ドライカレーってのがありますよね。 - 香辛料ですか?
インドカレーとアジアンカレーでは、使われてる香辛料はかなり違いますよね。
香辛料なら何でもいいって言っちゃうと、カレー以外でも香辛料を使う料理はいくらでもありますよね。
こういうふうに考えると、「カレーとは何か?」というのは難しい問題であることがわかりますね。
同じことを、「花」について、「本」について、あるいは「人間」について考えてみてください。
そう、世の中に存在するすべてのものは、こんな調子で「これはこう!」と言い切れるものはないのです。
イデア
困ったものです。これでは、私たちが抱える問題は解決するどころか、ますます複雑になっただけみたいですね。
さて、これについてむかーし昔のギリシャの偉いおじさんが、「イデア」という考え方で解決しようと試みました。
おじさんの名は「プラトン」です。
高校とかでちょこっと哲学をかじった方なら、聞いたことがあるんじゃないでしょうか?
彼の言うイデアとは、おおざっぱに言うとこういうことです。
イデアという完全不滅の真実の存在があって、私たちが見たり聞いたり感じたりする物事はその影。
イデアが存在しているのがイデア界(本質の世界)で、その陰が投影されているのが私たちの住む現実界。
なんと、カレーには「カレーのイデア」というものがあるのです。
カレーのイデアは、カレーの本質と言うこともできます。
あなたのカレーにも、お店のカレーにも、インドカレーにも欧風カレーにもアジアンカレーにも、さらにはカレーの王子様にも、カレーのイデアの影が射しているのです。
私たちもまた、人間のイデアの影に過ぎず、不完全な存在なので、イデアやイデア界を見たり聞いたり感じたりすることはできません。
ですが、イデアの影を感じることはできるので、いろんなカレーの中に、イデア界から射しているカレーのイデアの影を感じ取ります。
それで、「これはカレーだ」と認識することができるわけです。
で、クラス
私は哲学者ではないので、これが真実かどうかは知りませんが、これは非常に便利な考え方です。カレーの本質を持ったもの全てを「カレー」と呼び、みそ汁の本質を持ったもの全てを「みそ汁」と呼ぶ。
なんというシンプルで自然な分類方法でしょう。
あまりに自然なので、私たちはとくにその意味を考えることもなく、ごく日常的にこの分類方法を実践しています。
そう、私たちが前回までに発見した全てのオブジェクトは、みんな「イデア」を持っているのです。
プラトンは哲学者ですので、物事の本質であるということに着目して、これを「イデア」と名付けました。
(ちなみに、「イデア」は「アイデア」の語源でもあります)
でも、私たちはここで哲学を論じるわけじゃありませんので、これはちょっと大げさな名前です。
私たちは、素晴らしい分類法であることに着目して「クラス」と呼びたいと思います。
(クラスとは、種類や分類という意味です)
ただし、これがただの分類法ではなく、本質を表してもいるのだということを忘れないでください。
オススメ
ソフトウェア開発者の方向けには、こちらのブログ記事でも簡潔でわかりやすい例が紹介されています。また、開発者の方向けのオブジェクト指向入門には、オブジェクト脳のつくり方がオススメです。
オブジェクト指向でソフトウェアを考えるためのコツがわかります。
基本的なことをひととおり、比較的楽に理解することができるでしょう。
トラックバック、本文での言及ありがとうございました。分かり易いと言ってもらえて嬉しいです~。
返信削除n_shimizuさん、
返信削除いえいえ、こちらこそありがとうございますー。
今後も、お互いにオブジェクト指向をじっくり楽しんでいきましょう。