器を思い浮かべて欲しい。
良いだろうか。
次に、別の材質の器を思い浮かべて欲しい。
できただろうか(当然できたと思う)。
その二つはどちらも器の名の下に意識されたわけだが、何が共通していたのだろう。 勿論、名だけではないはずだ。
上が窪んでいる。 そう考えただろうか。
水が注げる。 そう考えただろうか。
もっと具体的な食べ物(例えばツナサラダとか)を乗せられることを考えただろうか。
まあ、何でも良い。水を注げる、と考えたとしておこう。 では、台所に行って蛇口を捻り水を注いでみよう。 いや、今度はそう考えるだけでなく、実行して欲しいのだ。
「何を馬鹿なことを言うのだ。 架空の器に水を注ぐなどということができるわけがない」
そう。 できるわけがない。
思い浮かべた器には実体がない。 だから、器には水を注げる、と考えたのに水を注げない。
実際に水を注げるのは、このコップ、あのサラダボウル、そのお椀である。 器なるものではない。
器を離れて、一般化してみよう。
同じ機能を果たすものに名を付ける。 この機能を実際に果たすのは、一つの物であって、頭の中のその名を付けられる思考対象ではない。
では、この思考対象は無意味だろうか。 当り前だが無意味ではない。 これを考えることは一群の物を類別することで、そうすることで世界がすっきりする。 この類の物はこういう機能を果たす、と言える。
だから 「家にあるマグカップにはコーヒーを入れて飲めるが、店に並んでいる類似品については実際に確かめてみるまで判らない」 などという奇妙な考えを起こさずにすむのだ。 (くどいようだが、実際にコーヒーを入れて飲めるのはそのマグカップであって、マグカップなるものではない。)
もう一度整理して言うとこうだ。 「物は提供できる機能によって類別される。 実際に機能を提供できるのは、特定の(これ、あれと指差せる)物である」
容易に解るように、特定の物は特定の材質や特定の形を帯びる。 器なるものは、木でも石でもガラスでも作れるし、丸くても四角くくても良い。 しかし、このジョッキは取っ手の着いた円筒形のガラスである。 そうでしかない。
さて、話はプログラミングに飛ぶ。
「オブジェクト指向」というのは、上で述べてきた「物」を扱うのだ、という考え方だ。 だから、「物指向」と言えば良いのだ。
コンピューターの中の話なので、材質や形といった属性はデータで表される。 機能は関数だ。 属性(データ)と機能(関数)の一まとまりを物(オブジェクト)と呼ぶわけだ。
もう少し一般的な用語法と比較しておこう。
「オブジェクト」は「物」である。 短すぎておさまりが悪ければ「物体」でも良いだろう。
「メソッド」は上では機能と言ったが、別の見方をすれば「使い方」とも言える。
「クラス」というのは概念、つまり上で見た類別における「類」である。 同様に「スーパークラス」「サブクラス」はそれぞれ「上位類」「下位類」とでも言えば良い。 これは元になるものと導かれるものという意味で親子関係で表現されたりもするが、混乱はないだろう。
「インスタンス」は「実物」といったところだろう。
最後に 前回 のふざけた訳の代わりに次のように訳せる。
1999-04-17