Toshです。

On 2002.01.09, at 13:00, TADA Tadashi wrote:
>> http://www.ogis-ri.co.jp/otc/hiroba/technical/MixJuice/
>> で、"差分ベースモジュール"という手法が提示されています。この言葉
>> はこの記
>> 事で知ったのですが、Walrusの実装で私はこれと似たようなことをRubyで行
>> なっ
>> ています。
>
>  私もこの記事に興味を持って、先ほど論文を読み終えたところです。Ruby屋さ
> んはけっこう無意識に似たようなことをやっているのではないでしょうか。なに
> せ、既存のクラスに好きなだけメソッドを追加できますし。
>
>  Rubyで言語拡張なしに差分モジュールをやろうとすると、module間の情報隠蔽
> ができないですよね。これはマイナス?
>
>  あと、MixJuiceのoriginal()相当がないので、メソッドのoverrideをする場合
> は工夫が必要かと。aliasを使ったフレームワークが必要だろうか。名前衝突も
> 回避のためにはきちんとフレームワークを作らないとダメか。

Rubyの場合リフレクションが結構強力(そう)なので、それを駆使すれば情報隠蔽
やoriginal()が実現できるんではないか、とちらっと考えてました。
Module#method_addedにフックを仕込んでおいて、元のメソッドはaliasで別の
名前につけかえて... とか。
あるいは、差分モジュールの追加はDecoratorみたいに
オブジェクトコンポジション
で実現することにして、元のコンストラクタを再定義して生成時にラッパー
をかます
とか。
AspectRもプリプロセッサとか無しで実装できているのだから、結構なんとかなり
そうじゃないかと。

# 実験してないので妄想ですけど。

>> ただ、ひとつのクラスが複数のクラスに分割されているというのは、気分的
>> に落
>> 着かないものです。特に、名前の衝突が問題になります。
>
>  私も可読性の低下が気になりました。論文ではクラスの継承による問題と同じ
> もので、ツールによって解決すべきものだ書いてあるので、そんなものかなぁ、
> とも思いますが。

Rubyはちょっとツール面弱い気はしてます。Smalltalkみたいにリファクタリング
ブラウザ、とまでは言わなくてもソースがブラウズできるクラスブラウザは欲
しい
なぁ。

---
Tosh
Toshiro Kuwabara