>>251
Smalltalkなんかだと、Smalltalkの開発環境もSmalltalkで
書かれているから、クラスをオブジェクトとして扱える事は
死活問題にかかわる。まさに自己書き換えの世界。

それ以外では、うーん、
例えばカラーパレットを実装したいとするよ。8bppとか24bppとか。
で、ColorPaletteという抽象クラスを作っておいて、
そのサブクラスにIndexedColorPaletteとRGBColorPaletteがあるとする。
で、8bppか24bppか32bppかに応じて使うクラスを切り換えたいと。
で、そんな場合は、それぞれのクラスにcanHandle()っていうメソッドがあって、
引数として8とか24とかのbppを与えると、trueかfalseを返してくれるようにする。
で、ここからがミソなんだけど、ColorPaletteクラスもオブジェクトだから、
「ColorPaletteの全サブクラスのそれぞれにcanHandle()を試してみて、
trueを返す」ようなメソッドを定義できる。
そしたら、その返ってきたクラスを使ってインスタンスを作ればいい。

クラスがオブジェクトじゃなくても似たような動作をさせる事は可能だけど、
サブクラスの名前をハードコーディングする事になると思う。
クラスがオブジェクトなら、サブクラスを追加した時にも
その追加したクラスのcanHandle()さえちゃんと定義しておけば
ColorPaletteクラスには手を入れる必要はない。
例えばBlackWhitePaletteとかMaskとか追加する時ね。

ってのはどうでしょう? >>251