vieweditattachhistoryswikistopchangessearchhelp

プロトタイプベースとクラスベースは対立する概念か?

CUE さんの、

なぜ、プロトタイプベースとクラスベースが対立概念のように書かれているのかが、いまいち腑に落ちない。
言語設計上、このどちらかを選ばなければ言語を実装できないという定理があるのであれば仕方がないが、少なくとも私は聞いた事がない。
感覚としては、プロトタイプベースはクラスベースを包含するように思うのだが、どうだろうか。


をうけて



対立する概念というのはプロトタイプベースが知られていないころの話、いや、それを知らしめるための方便だったのかもしれません。また、最近はプロトタイプベースでは trait という考え方を導入しています(NewtonScript なんか trait をもろクラスと称しています)し、かなり以前('96)の書籍にも、The design space between object-based and class-based languages should be seen as a continuum. (オブジェクトベースとクラスベースの間の空間は、連続体として表現されるべき。児玉靖司氏訳)と総括されているように、両者の境界は曖昧になっています。--sumim

たしかにプロトタイプベースの trait にオブジェクトを生成させる仕組みをもうけてオブジェクト生成に際してはそれのみを使用し、trait の委譲関係をツリー状に規定、インスタンスベースの委譲を禁止すればクラスベースができあがりますね(^_^;)。やはりプロトタイプベースはクラスベースを内包するのでしょうか。--sumim

ポイントは、オブジェクトの生成方法(クローン化かインスタンス化か)、委譲の自由度(オブジェクトごとにそれを許すか許さないか、web 状になることを許すか tree 状に限るか)でしょうか。--sumim

あ、もうひとつあった。オブジェクトごとにメソッドを持つことを許すか否か。--sumim

振り返ると、どうやら私は、オブジェクトがメソッドを持つことがができるか否かで、クラスベースかプロトタイプベース(インスタンスベース、オブジェクトベース、非クラスベース、あるいはそれらの傾向を有する“プロトタイプベースっぽい”もの)かを判断していたようです。--sumim

あう?委譲は、どっち指向(?)であろうが、やりたけりゃいつでもやれますよ? -戯
また、ツリー状かどうかも、あまり関係ないですね。C++のように多重継承つきのクラスってのも有るし。#菱形継承でもだえ苦しむC++(笑)

>プロトタイプベースはクラスベースを包含するように思うのだが

ふと思ったんだが、両者は、円と楕円、のような関係なんじゃないかな?
#どっちをSuperClassにするか悩んじゃう関係、ともいう(笑)

>あう?委譲は、どっち指向(?)であろうが、やりたけりゃいつでもやれますよ?
あうっ。すみません。一瞬、Smalltalk 以外を脳内消去していました(^_^;)。あと、なんていったらいんでしょうね。コードを組まずに…ってんでしょうか。オブジェクトにプロトタイプスロットを用意するのもある種コーディングだってことになるとお手上げですが。--sumim


>ツリー状かどうかも、あまり関係ない
そうですよね。多重継承ってのがありました(^_^;)。そうすると残るはオブジェクトごとにメソッドを持てるか否か、オブジェクトの生成手法がクローン化かインスタンス化か、でしょうか。--sumim


うひょ。Javaにclone()、Rubyにdup。インスタンス複製メソッドが有る世界は珍しくないし、無くても作れる世界は多かろうし。(^^; -戯

でも Java の clone() はインスタンス化してからコピーを作っているのですよね? ん。そうすると、複製してからクラス(trait)を決められるか、クラス(trait)を決めなければ複製できないかの違いか? いや。それも違う。クラス(trait)も複製されるべき要素か(つまり他のものへの置き換えもやろうと思えば可能か否か)…か。--sumim

おお。いいのがあった。クラス(trait)への委譲なしにインスタンス化(クローン化)が可能か否かってのではどうでしょうか。……いかん。Self には traits clonable ってのがあった(T_T)。--sumim

逆(?)から攻めてみよう。

情報(属性だのメソッドだの)の提供を、オブジェクト自身に肩代わりしてやってあげる奴(別オブジェクト?)が
居るとき、それをクラスと呼ぶか否かの違い…ってか?

うーむ。こう考えてしまうと、両者の差なんて、無いに等しいということになっちゃうなあ。
気分の問題でしかなくなっちゃうから。 -戯

クラスベース(ってのがあったとして(^_^;)<弱気)のインスタンスに Ruby でいうところの特殊メソッド、あるいはそうした同種の特殊な属性、つまりインスタンスごとに(属性の内容以外の)個性を持たせることができるようになれば、プロトタイプベース(ってのが…以下同文)に近づく。 プロトタイプベースも trait (メソッドや属性の数を肩代わりして規定する別オブジェクト)の採用でクラスベースに近づく。 クラスベース、プロトタイプベースは“っぽいもの”程度のもので、対立概念というより、おそらく委譲に関わる何かを楽にするための機構の、言語仕様におけるその整備の傾向を言い表したものにすぎないのかもしれませんね。--sumim

委譲と継承を、天秤のそれぞれの皿にのせるような議論は平行線になるのでは?
委譲というのはデザインであり、継承というのはアーキテクチュアではないの???--CUE

だから、私は「委譲か継承か」ではなく、「委譲・継承」という風に、二つ並べて書くだろう?(かなり以前からそうしているはず>戯)--CUE

>委譲というのはデザインであり、継承というのはアーキテクチュアではないの?

さぁ?そのような差が有ると考えたことは、とりあえず一度も無いですけど? -戯

というか、そういうのは、どこの名前空間に居ながら話をするかによって違ってくるんだと思うんだが、
そもそも今回の一連の議論がどこの空間に属するか自体がかなり不明なので、どうとでも解釈できちゃうってゆーか。

パラレルワールドみたいな感じかも(^^;

私も殊更に考えた事はない。「委譲・継承」と並べて書くのも、私にはそうするのが自然で理解に苦しまないからでしかない。--CUE


このページを編集 (5432 bytes)


Congratulations! 以下の 2 ページから参照されています。

This page has been visited 6467 times.