けいじゅ@SHLジャパンです. In [ruby-list :02615 ] the message: "[ruby-list:2615] Re: class design (Re: url escape) ", on Apr/05 00:27(+0200) MAEDA Shugo <ender / pic-internet.or.jp> writes: >Smalltalkを実際に使ったことがないのではずしてるかもしれませんが... >以前「サクサクSmalltalk」という本がいいよと教えられて読んでみたので >すが、こんなことが書かれていました。 > >(要約) >現実世界の事物をモデル化しようとする場合、コードの再利用の目的では >なく、分類の考えに立って継承を利用してしまうことはありがちである。 >しかし、サブタイプとサブクラスは異なる概念である。 >両者の違いを示す一つの例として、円と楕円がある。現実世界では円とは >長径と短径の長さが等しい特殊な楕円の一種であると言える。つまり、円 >は楕円のサブタイプである。しかしSmalltalkでそれを実装する場合、単一 >の直径変数を持つスーパークラスとしてCircleを定義し、さらに変数を付け >加えたサブクラスとしてEllipseを作成するだろう。 > >これを読んでなるほど、と思った記憶があります。 >rubistとしてはどちらの考え方が良いのかな。 うーん. この例ってあまり良くない例ですねえ.... 原さんもいわれているように実際に作ってみれば気づくことですが: In [ruby-list :02616 ] the message: "[ruby-list:2616] Re: class design (Re: url escape) ", on Apr/05 01:02(+0200) sinara / blade.nagaokaut.ac.jp writes: >でも、最初から Ellipse を作ることが分かっているなら、そっち >をスーパークラスにした方が絶対有利ですよね。Circle の方はほ >とんどコードを書く必要がない。逆だったら、Circle の多くのメ >ソッド を Ellipse で再定義することになるだろうから。 この通りだと思います. 実際にこのように作成した方が機能(メソッド)の共有 も多くできるようになると思います. 話しは戻りますが, 概念継承の悪い例としては, 実数の継承の例があると思い ます. 数学的概念継承関係は: Complex Real Rational Integer Fixnum となるわけですが, 実際にはこんな実装は意味がありません. これを実装する となれば以下のようになるでしょう: Number Integer Fixnum Rational Complex Real # こんなのがあればですけど クラスの継承を行うと必然的に構造の継承が起こりますので, それに合わせた クラス設計を行わなくてはならなくなるわけですね. また話しは戻って... In [ruby-list :02616 ] the message: "[ruby-list:2616] Re: class design (Re: url escape) ", on Apr/05 01:02(+0200) sinara / blade.nagaokaut.ac.jp writes: >ええっ、それは気持ち悪いぞっ!と最初思ったけど、単純なものか >ら複雑なものへ作っていくという考えからは自然かも知れないです >ね。 >考えてみれば n+1 次元の空間の特別な場合として n 次元の空間を >定義する人はいなわけで、小さい方から順々に作るのは数学も同じ >かな。 そうですね. 私が構成的数学の影響を受けているというのはこの辺りもいえる かも知れません. 先ほどの数のクラス構成も似ていなくもないですね. これら の構成のしかたはまさに上記の順番ですから... Integer -> Rational -> (Real) -> Complex __ .....................................石塚 圭樹@SHLジャパン(株)... ------------->アドレス変わりました!! e-mail: keiju / shljapan.co.jp <----