From: keiju@... (ÀÐÄͷ½¼ù ) Date: 1997-03-31T03:12:00+09:00 Subject: [ruby-list:2510] Re: class design (Re: url escape) けいじゅ@SHLジャパンです. 知らない間にメイルの洪水が起こっていますね.... In [ruby-list :02487 ] the message: "[ruby-list:2487] Re: class design (Re: url escape) ", on Mar/29 11:23(+0200) matz@caelum.co.jp (Yukihiro Matsumoto) writes: >「rubyによる『作る』オブジェクト指向」という文章がそのうち石 >塚さんか私によって書かれるはずですから,そこにはきっと載るん >じゃないですか? いみありげなぁ(^^;;; >後,特異メソッドのいれものとして使うなんて使い方も考えられま >すね.あまり正当的ではないと思いますけど. 特異メソッドのクラス版(特異クラス??)の入れものとしてモジュールを使うと いうてもありますね(^^;;; >|某I塚さんですね。(^_^) 私も最初あまり使わなかったんですが、 >|I塚さんが良く使われるので私も影響を受けているのです。一辺 >|たずねてみたかったのですが、どうして 特異メソッドと extend >|を多用なさるのでしょう。> 石塚さん >メタクラスが見えるSmalltalk出身だから? 学生時代はmeta-mathematics(数学基礎論), 特に構成的数学にはまっていたか ら(^^;;; 冗談はさておき. Smalltalk出身であることは事実なのですが, Smalltalkはシ ングル継承しかできませんので, 選択肢が狭くてあまり迷う余地はありません よね. 一方, rubyは色々選べてかえって迷ってしまうという... 私は元々, super class/subclassの構成に関しては, 標準的というか純粋とい うか正規的であって, 変な継承の仕方は好みでありません. 例えば, Arrayのサブクラスとして(数学の)ベクトルを表すVectorを作るとか は絶対しません. そういう意味では, 純粋なSmalltalkerといえるのですが... ただ, それはシングル継承しか選択肢のなかった時での話しで, rubyの場合は ちょっと変わってきますよね... 私の考えのもう1つの基本となるものは, クラスという概念は副次的なもので あって, まずオブジェクトありきです. クラスはある共通した性質を持つオブ ジェクト群を抽象化したものであるという風に考えています. # そういう意味では構成的数学のパラダイムの影響を受けているといえないで # もないですね. まあ, そんなわけでクラス単位ではなくて, 個別のオブジェクトに機能を追加 するという考え方にはそれほど違和感をもっていません. とはいえ, 本当の理由は, 特異メソッドやextendにこっているのは, 物珍しい だけかも知れません(^^;;; こういう言語は手元にありませんでしたので... 色々使ってみて実際にどのような用途があるのか体験中ってところでしょうか... 最近は, ソケットの汎用プロトコル作成/通信フレームワークに挑戦中なので すが, そこでは mix-inモジュールの効果的利用法に挑戦中です. FWの様なあ る程度制限された用途のクラスライブラリにおけるmix-inモジュールも色々な 用途があるなあと実感しつつあります. rubyでは, 色々なクラス(オブジェクト)構成法があって面白いと思っています. モジュールでは: * メソッドをまとめるために使うパッケージとしてのモジュール * includeされるためのmix-inモジュール * 主にextendに用いられるモジュール * 抽象モジュール(抽象クラスのモジュール版) クラスの作り方としては: * 独立クラス * サブクラス * proxyクラス(デレゲーション) * あるクラスをincludeしたクラス オブジェクトの構成法: * インスタンス * 特異メソッドを付加したオブジェクト * モジュールをextendしたオブジェクト 既にあるクラスに機能を追加するには: * サブクラスを作る. * proxyクラスをつくる. * 既にあるクラスに直接メソッドを追加する. * 既にあるクラスに直接モジュールを追加(include)する. * インスタンスに対して特異メソッドを定義する. * インスタンスに対してモジュールをextendする. このように色々な用法があるわけですから, 色々と悩むのも当たり前といえば 当たり前ですね. PS. ただ, 私だって, 実際はextendや特異メソッドだけを使っているわけで なくて, サブクラスを使っていることの方が多いんですよ. __ .....................................石塚 圭樹@SHLジャパン(株)... ------------->アドレス変わりました!! e-mail: keiju@shljapan.co.jp <----