寺尾聡の曲「ルビーの指輪」をもじってこんな題名をつけました。早い話がRubyというオブジェクト指向型言語について説明しようと思ったのですが、未だに”オブジェクト”という言葉の意味がアバウトなので、Rubyの基礎編として一緒に考えてみたいと思います。
1.一体オブジェクトって(Rubyで考えてみる)?
objectを直訳すると”もの”という意味になります。もの、つまり物体を意味しており、形があるものと言うことになります。それを考えると、現実の世界に存在するもの、犬、猫、猿、等の動物も、もちろん、俺たち人間もオブジェクトです。
Rubyの概念を説明するとオブジェクトという表現が非常にアバウトに感じます。少なくても俺は・・・・。しかし、本来の言語上でのオブジェクトの概念はアバウトなのかもしれません・・・・とか改めて考え直したりします。Rubyの世界ではオブジェクトは、文字列及び数字さらには、抽象的ですが、”集合”も全て含まれます。さらに、Rubyではオブジェクトを”値”と呼ぶことがあります。
世の中には、色々なものがあるようにオブジェクトと解釈されるものも様々です。しかし、様々なオブジェクトがありますが、全て共通性があります。それは、”全てのオブジェクトは命令されると、それに答える。”ということです。答えを正確にフィードバックするか、あるいは拒否するか。ということはありますが、何かしらレスポンスを返します。命令というのは、ある意味で命令した方は期待する解答を求めてることでもあると考えます。
例えば命令されて、その命令の内容(仕事)をオブジェクトさんが知っていればオブジェクトさんは言われたことを実行します。しかし、知らない内容であれば、オブジェクトさんは”残念ながら、それは知りません。”と返事をします。
しかし、命令する方も考えなくてはいけません。まさか、猫に”ワンと鳴け!”なんていじめのような飼い主はいないと思います。猫には、”ニャンと鳴け!”と命令すべきでしょ(笑)。ですから、オブジェクトが解釈できる命令をわきまえて、命令する事によりオブジェクトを上手く使いこなすことが必要でしょう。基本的にオブジェクトは、知っている命令については完全服従しなければなりません。ただし、命令するプログラムにバグがないことが前提です。結局、これがオブジェクト指向の概念ではないでしょうか!なんて、俺は思っています。
2.メソッド(関数を考えてみる)
1項のオブジェクトで説明した”命令”のことを”メッセージ”と言います。命令に対応するアクション(仕事)をメソッドと言います。メソッドは、言語の世界では”関数”と表現される場合があります。Rubyでは、メソッドを呼び出すために以下のように表現します。
mity.x()
”mity”の部分がオブジェクトで、指定する式とかがかけます。つまり、メッセージを受け取るためのオブジェクトです。”x”の部分がメッセージ(命令)です。つまり、この表現はオブジェクトxと言う名前のメソッドをコール(呼び出し)ているわけです。
以上
コメント