2003-10-10 (Fri)

_Sams Teach Yourself Ruby in 21 Days」Mark Slagell (著)

初心者向けのRubyの解説書なのですが、おもしろいのです。Ruby文法をつっこんでいるという意味ではありません。あくまでプログラミング初心者が対象です。しかし、説明が物語として面白いので、ついつい読んでしまいます。つまり、Ruby Wayなのです。それもそのはずで、「Ruby Way」の著者も執筆にかかわっています。

これからRubyを学ぼうという人にはおすすめです。英語と言語の両方を相手にするのは難しいですが。

_ ObjectとInstanceとのちがい

で、objectとinstanceのちがいの説明で納得しました。instanceはan instance of a classです。Rubyでは、instanceであるobjectに固有のメソッド(機能)をもたせることができるので、objectとinstanceとは明確にちがいます。一方、Javaではそのような違いがないので、objectとinstanceとは同じです。だから、JavaはObject-Orientedというよりは、Class-Oriented、Instance-Orientedというべきかもしれません。

この差は大きいのではと私は感じるのですが、やり方がまったくわかりません。誰か、あるならある、ないならない、と教えてもらいたいです。ちまたのObject Modelingの本は、そういう意味では、Class Modelingしか扱っていないんですよね。Rubyの潜在能力の1割くらいしか使っていないようで、悔しいです。

たとえば、男性と女性を区別するときは、Person superclassのsubclassとして、Male/Female classを作ります。さて、職業をあらわそうとすると、Job superclassのsubclassとして、Student/BusinessManを作ります。ここで、Class-Orientedではややこしくなります。Job階層の下に性別subclassを作ったり、State/Strategy patternを使ったりします。

一方、Rubyだと、Person Moduleにしてmix-inという手もあります。さらに、Personとしての性質は、Job instanceにくっつけてもいいわけです(object)。

これらのObject Designを、どう使い分ければよいのか、どんなpatternがあるのか、ぜひとも知りたいです。

_ Ruby 1.8 変更点

リンク

追記:こちらが新しいそうです [through zt diary]。

_ 『極めよRuby道』の記事一覧

特に、最終章、math/statistics.rbが興味深い。

特にこのコード、何をやっているのか最初さっぱりわからず、ショックでした。

[]