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