オブジェクト指向とは認識の限界である。
人は物を認識するとき、どのように捉えているのであろうか?たとえば、あなたの目の前に一つのペンがあるとしよう。あなたは「それ」を『ペン』と認識している。でも、よく見て欲しい、それはただのプラスチックの細長い棒だ。あなたはそれでも「それ」を『ペン』と認識している。
そこで一枚の紙を持ってきて、あなたに名前を書いて欲しいと頼んだとしよう。あなたは「それ」を手にとって、紙に名前を書くだろう。まってくれ、なぜあなたは「それ」を使って紙に文字を書けることを知っているのか?ただのプラスチックの細長い棒じゃないのか?いやいや、もしかしたらペン型ライターやペン型カメラではないのか?もし、文字が書けなかったら、そういった疑問も持つかも知れないけど、あなたはやっぱり、「それ」を『ペン』だと認識しているから、「それ」を手に取ったのだ。そして、あなたは『ペン』が文字を書くことができる道具であることを知っている。だから、『ペン』である「それ」を使って文字を書こうとしたのだ。もし、あなたが「それ」を『ペン』だと認識してなかったらどうだろう?きっと文字を書く道具を持ってくるよう、依頼者に頼んだであろう。
つまりだ。人は物を捉えるとき、その物が「何であるか」を含めて認識する。そうでなければ、目の前にペンがあっても、そのペンを使って、文字を書こうとすることすらできない。人は物のあるがままを見る事など不可能であり、必ず「これは○○である」というフィルター(色眼鏡)を通してしか、認識することはできないのだ。
さて、ここにStringの変数aがある。あなたは「変数a」は『String』であると認識している。そして『String』が文字列であり、いくつかのメソッドがあると知っている。そう、これは先ほどのペンと同じだ。オブジェクト指向とは物の認識の仕方をプログラミングに当てはめた概念なのだ。物事をカテゴライズするように、クラスとしてわけ、カテゴライズに親子関係があるように、継承を考え、そのものの性質や能力として、プロパティやメソッドを与える。こうして、人として自然の考え、つまり認識の限界を踏まえて、プログラミングすることを可能にするのが、オブジェクト指向なのである。