プロトタイプベース・ ..
809:デフォルトの名無しさん
05/01/02 17:40:46
>>808
> プロトタイプベースと呼んでいいものかどうかわかりませんが、
> 実装を考えれば自然な発想で、プロトタイプベースに通じるものがあると思います。
モジュールはコピれないところがちょっと厳しいけど、
オブジェクト的なエンティティの直接記述という意味では
確かにプロトタイプベース的だよな。
810:デフォルトの名無しさん
05/01/15 15:32:03
思ったんだけど、プロトタイプベースの真髄を「クラスを必要としないオブジェクトの生成」にあるとすると、
別にクラスベースとオブジェクトベースが相反する概念ってわけじゃないんじゃないか?
クラスから生成したインスタンスをプロトタイプベース並みに改変できるというわけで
クラス=型とみなしての型付けは、やりにくいかもしれないが
811:デフォルトの名無しさん
05/01/15 16:25:05
>>810
それクラスベースの意味がないと思う。
プロトタイプでも「設計図を渡してそれに沿ったオブジェクトを返す」ってルーチン作ればいいだけだし
812:デフォルトの名無しさん
05/01/15 16:25:46
javascriptが丁度そんな感じ
813:デフォルトの名無しさん
05/01/15 16:36:00
>>811
> それクラスベースの意味がないと思う。
どうして?
> プロトタイプでも「設計図を渡してそれに沿ったオブジェクトを返す」ってルーチン作ればいいだけだし
つーか、それってクラスがfirst class objectなOO言語(例えばSmalltalk)そのものじゃん。
814:デフォルトの名無しさん
05/01/15 16:50:03
>クラスから生成したインスタンスをプロトタイプベース並みに改変できるというわけで
それRubyの特異メソッド(クラス)
815:デフォルトの名無しさん
05/01/17 01:17:36
メソッド起動に関していえば、インスタンスベースとクラスベースの違いは、
オブジェクトがクラスに委譲せずに起動可能なメソッドを持てるかどうかに
尽きます。
816:デフォルトの名無しさん
05/01/17 02:39:52
Rubyが実用とは程遠いことがよくわかった
817:デフォルトの名無しさん
05/01/17 19:14:28
じゃあPythonも一緒?
818:デフォルトの名無しさん
05/01/19 20:28:30
なんかクラスベースとプロトタイプベースの区別がわかんなくなったので、
「実行前にオブジェクトの挙動が決定されるかどうか」
って線引きをしてみたんだけど合ってる?
すると、ruby なんかのスクリプト系がまたよくわかんなくなるんだけど、如何なものか
819:デフォルトの名無しさん
05/01/19 22:07:57
>>818
それは「静的か動的か」の線引きでは?
820:818
05/01/19 22:19:57
>>819
クラスをコードとして記述できるかどうかの意味で引いてみた
インスタンスをコードに記述することはできないやん
821:デフォルトの名無しさん
05/01/19 23:39:34
何いってんだかさっぱりわからんよ
822:1
05/01/20 00:19:16
私はソース上のプリミティブな要素がクラスなのかインスタンスなのかを
基準と考えておりますがどうでしょうか。
823:デフォルトの名無しさん
05/01/20 08:14:59
>>822
つまり、実行機構および言語機能による分類ではなく、言語表現による分類であると。
なかなか興味深いと思います。
今まで出てきたプロトタイプベースの特性について、その分類がどのように関与するか
検討してみると面白いかもしれません。
1. 実行時メソッド変更
2. 実行時スロット拡張
3. 実行時プロトタイプ変更
824:デフォルトの名無しさん
05/01/20 14:18:23
>>822 >>823
オブジェクト指向って、まだ良くわかんないんだけど
その話題はなんとなく面白そうなので、もっと展開してほすぃ。
825:デフォルトの名無しさん
05/01/21 09:37:40
別の視点で、継承の実装方法による分類ってのもあったな.
(A) Cloning
(B) 実行時(メソッドのinvoke時)に親から探してくる
(C) コンパイル時に親から探してくる
他には、実行効率と柔軟性の両方を考慮した、実行時にコンパイルする実装もあるけど、
要点は、Cloning or Look-up, オブジェクトが循環構造になるか階層構造をとるかって辺りにあると思う。
(B)の実装では、以下のような概念を導入してプロトタイプ的な柔軟性を実現している
・first class object, meta class
・instance specifit behavior
・dinamically lookup
それに対して、(A)の実装では、これらは設計上自然に備わっている特徴として捉える事が出来る。
826:818
05/01/22 12:39:40
>>822
なんか、微妙に俺が考えてたものとニアミスしている気がする
俺はつまり、クラスを記述できちゃったらクラスベースと考えたわけだが
827:823
05/01/22 14:25:14
>>826
俺的には、クラスを記述できるかどうかはあまり本質ではないと思う。
俺は逆に、任意のオブジェクトを1つのリテラル表現として記述できるかどうかが
インスタンスベース言語であるかどうかを判断する表現上の基準になるんじゃないかと
思うのだが。
828:デフォルトの名無しさん
05/01/22 19:52:57
プロトタイプベース初心者です。
URLリンク(www.ice.nuie.nagoya-u.ac.jp)
このへんを読むと、プロトタイプベースの言語では、あるインスタンスの
スロットを探してメソッドがなかったら、その親のスロットを捜しに行くように
読めます(これがプロトタイプチェーン?)。
素人目には、こんなことをしなくても、clone()の時点でスロット全部コピー
すればよさそうに思えるのですが、この動作の利点は何なんでしょうか?
a)スロットのメモリ領域を節約できる(微々たるもんだよなー)
b)親のメソッドを差し替えたり、親にメソッドを追加したとき、
子からも新しいのを使うことができる。
程度しか思いつきません。
b)は、正直、「こんなことやっちゃっていいの?」と思います。
対話的なプログラミングなら嬉しいかもしれないけれど。
829:デフォルトの名無しさん
05/01/22 19:58:48
プロチ初心者というよりは動的言語初心者未満だな。
830:818
05/01/22 20:01:41
>>827
え〜!?
「newobj = obj.Clone();」とかやっても、インスタンスを記述したことにならないやん
インスタンスは変数の裏に隠れて移動するだけだし
リテラルとして考えると、「1」とか「"text"」とかは確かに記述できるけど、
それはクラスベースでもプロトタイプベースでも、あまり変わらないし
任意のオブジェクトを記述できる手段として“クラス”があると捕らえているのよ
それを 1st class object と捕らえるとか、そういう話云々は別として
831:828
05/01/22 20:50:26
>>829
まあそうなんでしょうねえ。
読み返していたら、>>58を見付けました。
> 画面にたくさんのテキストフィールドがあって、
>それのイベントハンドラをいっせいに切り替えるようなこと。
>画面のモードによって、いっせいにフィールドの挙動を変えるようなこと。
たとえば画面上のボタンを押した時点でこういう挙動を起こしたければ、
「スロットまるごとコピー方式」だけじゃうまくいきませんね。
832:デフォルトの名無しさん
05/01/22 22:44:26
>>830
基本的に分かっちゃないくせにぶっちゃう莫迦だなコイツ。放置の方向か?
833:818
05/01/22 23:03:49
>>832
ああ、俺が馬鹿なのは否定できないし、スルーしても別にかまわないし、
そういえば 827 と 830 は微妙に話が噛み合ってないと今更突っ込みたくもなったけど、
基本的に、リテラルを除けば
「記述できるインスタンス」と「記述できないクラス」は存在しないとは思っている
834:デフォルトの名無しさん
05/01/22 23:10:33
>828
IOのcloneはスロット全部コピーするらしいよ。
効率を考えると全部コピーした方がいいけど、b)の柔軟性も
魅力的。
個人的にはcloneは全コピーで、それとは別にdelegateが
あったほうがいいなあ。
835:828
05/01/22 23:24:44
>>834
>IOのcloneはスロット全部コピーするらしいよ。
え、そうなの?
俺、↓読んで、てっきり逆だと思ってました。
URLリンク(sumim.no-ip.com:8080)
| 実手続きとしてチャイルドを作るときに clone(あるいは clone() )を
| 使用できるものと、clone は copy(shallow copy)と同義で、
| 単にプロトタイプの複製を作るだけのものがありまぎらわしい。
| 実は Io を除き、ほとんどの言語は後者で、むしろこのほうが一般的。
| つまり、我々が一般にイメージするクローン(じつはチャイルド)を
| clone で作ることはできない。
836:デフォルトの名無しさん
05/01/22 23:27:44
>>835
shallow copy って事は、スロットを複製しない浅いコピーって解釈で良いんじゃない?
Io は前者、つまり clone でスロットも複製するって感じで
837:デフォルトの名無しさん
05/01/23 00:46:44
何のための proto かと
838:デフォルトの名無しさん
05/01/23 00:56:56
まあ2chじゃよく見るわけだが。
>>829とか>>832とか>>837とか、具体的なことを何も言わずに、1行かそこらのレスで
何か偉そうなことを言った気になれる奴ってのは楽でいいね。
オレモナー
839:デフォルトの名無しさん
05/01/23 01:27:54
>>834
全部コピーはしてないよ。
proto スロットにプロトタイプとなるオブジェクトが入れられて、
スロットが見付からない際に利用される。
hoge := Object clone
piyo := hoge clone
hoge greet := method("hello" print)
piyo greet # "hello"
hoge greet = method("hoge!!" print)
# ↑コピーするなら、これは効かないはず
piyo greet # "hoge!!"
# piyo の持つスロットは proto 唯一つ。
840:デフォルトの名無しさん
05/01/23 05:01:29
>>828
スロットをコピーするといっても、実態を全部コピーするわけではなく、
その参照をコピーするだけに留めるとクローン生成時のコストは抑えられる。
スロット追加時に、その参照から実態を複製しそこに新しいスロット追加する。
841:823
05/01/23 07:34:46
>>830
> 「newobj = obj.Clone();」とかやっても、インスタンスを記述したことにならないやん
・・・
そういうのを排除するためにわざわざ「リテラルで」という限定詞を入れたんだけど。
> リテラルとして考えると、「1」とか「"text"」とかは確かに記述できるけど、
> それはクラスベースでもプロトタイプベースでも、あまり変わらないし
例えば、
cat = object {
mew(times) { self.make_sound("mew") }
walk(direction, distance) { self.dir = direction. self.move(distance) }
...
}
みたいな話ができてやっと「インスタンスベース」と言えるんじゃないか、って話な。
842:デフォルトの名無しさん
05/01/23 07:44:00
>>841
javascriptならそれでできるぞ
843:823
05/01/23 09:22:03
>>842
ですよね。そういうのをインスタンスベース(あるいはプロトタイプベース)と呼ぶのが
言語表現上の分類として適切なのではないかと。
844:デフォルトの名無しさん
05/01/23 09:56:09
rubyもできるぞ
str = "string"
845:デフォルトの名無しさん
05/01/23 10:11:28
>>844
文字列以外のオブジェクトは?
846:823
05/01/23 10:20:27
>>844
> str = "string"
そういうのを排除するために「任意のオブジェクトを」1つのリテラル表現として
記述できるかどうか、と書いたのだが。
847:デフォルトの名無しさん
05/01/23 10:47:50
>>841
こういうのもリテラルと呼ぶのか
cat = object(
mew(times) { self.make_sound("mew") },
walk(direction, distance) { self.dir = direction. self.move(distance) },
...
);
848:デフォルトの名無しさん
05/01/23 10:52:58
>>836
ちゃう、ちゃう。ここで“前者”はディープコピーではなくて、チャイルド(プロトチェーンに
委譲する、俗に“クローン”と呼ばれているもの)を作ること。Io は clone でチャイルド
を作るけど、SELF などは clone でチャイルドを作らずにシャローコピーを作るってこと。
849:デフォルトの名無しさん
05/01/23 10:57:38
>>846
>>815じゃ駄目なの? これに尽きると思うけど。
850:デフォルトの名無しさん
05/01/23 11:15:20
javaのMathはオブジェクトを直接書いてるように見える。
メソッドも自己完結してる
851:デフォルトの名無しさん
05/01/23 11:25:42
>>850
ぜんぶstaticやん。Mathはネームスペースを提供しているだけだがな。
852:823
05/01/23 12:14:39
>>849
>>815はメッセージ送信の実行機構による分類でしょ。
もちろんそれはそれで1つの正しい分類だしそれに異存はない。
が、今は言語表現による分類をするとしたら、という話をしているわけ。
853:823
05/01/23 12:15:58
>>850
javaのMathで「任意の」オブジェクトをリテラル表現できるわけ?
リテラルってのは定数表現だよ、念のため。
854:デフォルトの名無しさん
05/01/23 12:30:45
>>841
字面を見る限り、Javaの無名クラスとどう違うのかって気が…
855:823
05/01/23 16:47:52
>>854
> 字面を見る限り、Javaの無名クラスとどう違うのかって気が…
だからさ、そこがポイントなわけよ。
Javaの無名クラスはあくまでクラスでしょ。
それをインスタンスに対してできてこそのインスタンスベースじゃない?
856:デフォルトの名無しさん
05/01/23 17:09:42
>Javaの無名クラスはあくまでクラスでしょ。
んー、それはJavaがクラスベースな言語なんだから当然の話であって、
こういう書き方ができるかどうかって事と、
クラスベースかインタスタンスベースかって事は直交した問題なんじゃ?
857:818
05/01/23 19:08:46
>>841, >>854-856
>例えば、
>cat = object {
>mew(times) { self.make_sound("mew") }
>walk(direction, distance) { self.dir = direction. self.move(distance) }
>...
>}
>みたいな話ができてやっと「インスタンスベース」と言えるんじゃないか、って話な。
実は、やっとココで >>818 の話に繋がるんです
仮に cat に代入されるオブジェクトが『実行時、今まさに作られるのならば』インスタンスベース
しかし、オブジェクトを生成する為の“メタオブジェクト”と呼べるものが『既に作られていたのならば』クラスベース
では無いかと思ったわけで
858:デフォルトの名無しさん
05/01/23 19:09:17
すまん age ちまった許して……っていうか石投げないで……
859:823
05/01/23 19:12:17
>>856
> >Javaの無名クラスはあくまでクラスでしょ。
>
> んー、それはJavaがクラスベースな言語なんだから当然の話であって、
でしょ。
だったら、インスタンスベース言語ならそういう表現ができて当然なんじゃない?
860:デフォルトの名無しさん
05/01/23 19:14:31
>>859
少なくとも Io でそういう表現は出来なかったと思う
861:823
05/01/23 19:15:42
>>857
> 実は、やっとココで >>818 の話に繋がるんです
> 仮に cat に代入されるオブジェクトが『実行時、今まさに作られるのならば』インスタンスベース
実行時に生成されるかコンパイル時に定数として生成されるかで振舞いが変わるかな?
いずれにせよ、そのオブジェクトの動作はリテラルとして記述された通りなわけで。
862:823
05/01/23 19:17:03
>>860
> 少なくとも Io でそういう表現は出来なかったと思う
まあそういう例もあるだろうね。
その場合はプロトタイプを使ってオブジェクトを生成するしかないから、
インスタンスベースとプロトタイプベースを区別したほうがいいのかも。
863:818
05/01/23 19:23:05
>>861
>実行時に生成されるかコンパイル時に定数として生成されるかで振舞いが変わるかな?
あ、↑みたいに言った方が良かったかも ^-^;
件のコードは、
「object まで到達した時点でオブジェクトが作成され、次いで mew と walk が接続され、そして cat に代入される」
……なら、実行時に作ったということでインスタンスベース
「object まで到達した時点で、既に完成されたオブジェクトが生成され cat に代入される」
……なら、クラスベース
ということで
864:デフォルトの名無しさん
05/01/23 19:36:40
>>862
おいおい。自説大事に生粋のインスタンスベースを例外扱いかよ。
真性だな。
865:デフォルトの名無しさん
05/01/23 19:40:28
>>862
プロトタイプベースとインスタンスベースとオブジェクトベースは
同じものの別の呼び名です。念のため。
866:818
05/01/23 19:44:09
そういえば俺が見た本の中には
『プロトタイプベース』『クラスベース』『オブジェクト指向』がそれぞれ違う概念として紹介されて棚w
クラスが無ければプロトタイプベース、
継承しなければクラスベース、
継承してればオブジェクト指向
ってな感じに。俺は違和感あった
867:デフォルトの名無しさん
05/01/23 19:49:30
無名だろうとクラスにメソッドを定義しないといけないのならクラスベースだよ。
シンタックスの妙でインスタンスベースっぽさを名乗るのは勝手だが。
インスタンス特異と見せかけて特異クラスを使うRubyの特異メソッドもしかり。
868:デフォルトの名無しさん
05/01/23 20:03:36
>>867
んじゃこれどう見る?
class Hoge begin
proc void Fuga begin
〜
end;
end;
これがインスタンスベースだって言ったら怒る?
この場合はルートのオブジェクトに対して class メッセージを送ってみたんだが
すると、Hoge という名のクラス (1st class object) が生成される、という仕組み
869:デフォルトの名無しさん
05/01/23 20:05:32
>>866
まあとにかく、経験則のみで既存概念の再定義をやたら試みようとするのが
オブジェクト指向界隈の悪しき慣習だから、オリジナルペーパーや出典を明らか
にしない解説の類は眉唾で読まないとね。自分が紹介したり解説している考え方
の出所すらしらずに文章を書いて(カネまでもらってw)いるヤツのなんと多いことか。
870:デフォルトの名無しさん
05/01/23 20:10:44
>>869
>自分が紹介したり解説している考え方の出所すらしらずに
>文章を書いて(カネまでもらってw)いるヤツのなんと多いことか。
だって、全部自分の「再発明」なんだもん・・・
871:デフォルトの名無しさん
05/01/23 20:15:25
>>868
classメソッドはどこに定義されているの?
872:デフォルトの名無しさん
05/01/23 20:18:52
>>871
ルートオブジェクト
ちなみに、ルートオブジェクトはこの言語の世界が生まれたときには既に存在していました
つまり神に相当するオブジェクトです
……ま、でっちあげの脳内言語だけどな
873:868
05/01/23 20:22:14
肝心なのは、クラスとインスタンスの間に越えられない壁が有るという事……なのか?
この当たりはよく分からん
874:デフォルトの名無しさん
05/01/23 20:26:53
>>872
じゃあインスタンスベースでいいけど、脳内じゃな… w
そもそもHogeとかFugaとか関係ないし。わけわかめ。
875:デフォルトの名無しさん
05/01/23 20:45:18
>>874
うん。脳内。
だけど、基盤は出来てるから class メソッドをちゃんと組み込めばいいだけ。
面倒だからやりたくないけど。
876:デフォルトの名無しさん
05/01/23 21:46:04
面倒なのがクラスベース
お気軽なのがプロトタイプベース
適当なのがインスタンスベース
877:デフォルトの名無しさん
05/01/23 21:49:59
クラスベース⇔オブジェクトベースだと思ってたけど。
878:デフォルトの名無しさん
05/01/23 22:16:50
>>859
>> んー、それはJavaがクラスベースな言語なんだから当然の話であって、
>でしょ。
>だったら、インスタンスベース言語ならそういう表現ができて当然なんじゃない?
「でしょ」じゃなくってさあ。
クラスベースの言語でも、無名クラスのような表現ができるのとできないのとがあるように、
インスタンスベースの言語でも、こういう表現ができるのとできないのがあっていい。
だから、この表記ができるかどうかの問題と、その言語がインスタンスベースであるか
どうかの問題は、直交している、って言ってるの。
879:デフォルトの名無しさん
05/01/23 22:19:10
>>878
『直交』という表現よりも『ニアミス』というか『次元がズレている』っていう表現の方がよくないか?
まぁ、書き方は幾らでも考え付くんだ
そのなかで『プロトタイプベースって一体何?』って話だよな?
880:デフォルトの名無しさん
05/01/23 23:33:57
>>877
だから対立した考え方じゃないんだってば。クラスベースで、インスタンスが自前の
メソッドや属性を自由にできない…という制約をといたのが、インスタンスベースだ。
881:デフォルトの名無しさん
05/01/23 23:41:50
>>876
くどいようですが、インススタンスベースとプロトタイプベースは同じものです。
プロトタイプベースというと、プロトタイプの複製でオブジェクトを生じさせること
やプロトタイプチェーンによる委譲といった、特徴だけど、本質ではないところ
のみ取りあげて、やたらクラスベースと対比させたがる人が多いので困ります。
882:デフォルトの名無しさん
05/01/23 23:45:35
>>881
『複製でオブジェクトを生じさせる』 を 『クラスに因らないオブジェクト生成』 だと解釈すれば本質だと思うけど
883:デフォルトの名無しさん
05/01/24 00:04:49
それぞれ視点が違うだけなのに困られても・・・。
884:デフォルトの名無しさん
05/01/24 00:36:32
>>882
いや。それが本質じゃないだってば…。orz
885:デフォルトの名無しさん
05/01/24 00:44:58
>>883
プロトタイプの語感からくる間違った認識で議論されるのは困ると思う。
だからインスタンスベースかオブジェクトベースと呼ぼう!
A Theory of Object でもオブジェクトベースって言っているしね。
URLリンク(tinyurl.com)
886:823
05/01/24 12:07:41
>>863
> 「object まで到達した時点で、既に完成されたオブジェクトが生成され cat に代入される」
> ……なら、クラスベース
クラスは存在せず、プロトタイプからコピーする場合でも、クラスベースと呼ぶ?
887:823
05/01/24 12:09:08
>>865
はい。それ承知の上で、あえて区別分類してみようかと。
というのも、インスタンスベースだからといってプロトタイプという概念が
必然かどうかはまだ議論の余地があると思っています。
888:823
05/01/24 12:12:16
>>868
> これがインスタンスベースだって言ったら怒る?
> この場合はルートのオブジェクトに対して class メッセージを送ってみたんだが
> すると、Hoge という名のクラス (1st class object) が生成される、という仕組み
クラスが存在する時点でクラスベースとおもわれ・・・
というか、それがインスタンスベースだと言うのならSmalltalkはインスタンスベース?
889:823
05/01/24 12:14:10
>>878
> クラスベースの言語でも、無名クラスのような表現ができるのとできないのとがあるように、
> インスタンスベースの言語でも、こういう表現ができるのとできないのがあっていい。
もちろん、一般的な定義としてのインスタンスベースならば、その通り。
今議論しているのは、言語表現としてインスタンスベースあるいは
プロトタイプベースを定義するのならば、どういう基準になるのだろうか
という話。
890:823
05/01/24 12:15:31
>>880
じゃ、rubyはインスタンスベース?
Smalltalkにもいくつかインスタンス毎にメソッド定義できる環境があったけど、
そういうのもインスタンスベース?
891:デフォルトの名無しさん
05/01/24 12:26:13
>>890
Rubyの特異メソッドはインスタンスに定義しているようにみせて、
実は特異クラスという見えない無名クラスに定義しています。
したがって、セマンティックス的にはクラスベースです。
シンタックス的にはインスタンスベースっぽいと言っても構わないでしょう。
Smalltalkの例もしかりです。とにかく、実質クラスにメソッドを定義
しなければならなければクラスベースです。
892:デフォルトの名無しさん
05/01/24 12:49:09
rubyだとクラスってオブジェクトの1種じゃなかったっけ
893:デフォルトの名無しさん
05/01/24 13:01:00
>>892
RubyもSmalltalkもクラスはまた別のクラスのインスタンスです。
Rubyは特異メソッドでクラスメソッドを“持っている”ように見えますが
これも特異クラスの暗黙の介在が必要です。したがって、こうしたクラスも
それ自体が自身で起動できるメソッドを持てているわけではないのです。
894:823
05/01/24 13:25:32
>>891
> Smalltalkの例もしかりです。とにかく、実質クラスにメソッドを定義
> しなければならなければクラスベースです。
いや、Smalltalkの例の場合には、インスタンスにスクリプトをつけられる環境で、
それは無名クラスではなく、インスタンスがスクリプトのメソッド辞書を持っていた。
また、pythonの場合には特異クラスではなく、これまたオブジェクトのスロットに
直接バインドできる。
rubyはよく知らん。
895:デフォルトの名無しさん
05/01/24 15:34:14
>>894
インスタンスにメソッドをバインドできても、それを起動するための
しくみをクラスに仕込まなければならないならば、結局は同じことです。
繰り返しになりますが、そうした機構をもってインスタンスベース的と
宣伝するぶんには差し支えないと思います。
Pythonにはインスタンスベースの素養が十分あると言って良いと思います。
896:823
05/01/24 15:47:59
>>895
> インスタンスにメソッドをバインドできても、それを起動するための
> しくみをクラスに仕込まなければならないならば、結局は同じことです。
いや、スクリプトを書く側にとっては、クラスに一切の変更を加えることなく
新しいメソッドを追加できた。
897:デフォルトの名無しさん
05/01/24 16:39:29
>>896
ですから、くどいようだけどそれはRubyの特異メソッドと同じこと。
ユーザーは特異メソッドを使うにあたって特異クラスを意識する
必要は必ずしもないわけだから。ユーザーがクラスの介在を意識しないで
済んでしまうような計らいがあるとき、それはインスタンスベースだと
言い切るのなら、それはそれで構わないと思う。ただ、無用な議論を避ける
ために、但し書きは必要でしょうけど。
「自分はシンタックスにおいてインスタンスベースなら、それの言語・
処理系はインスタンスベースだと解釈する立場だ」…とかね。
898:823
05/01/24 16:45:36
>>897
> 「自分はシンタックスにおいてインスタンスベースなら、それの言語・
> 処理系はインスタンスベースだと解釈する立場だ」…とかね。
いや、俺の立場がどうこうという問題じゃなくて、
今議論しているのは言語表現上(syntaxだけではなく、constructsの問題)で
クラスベースとインスタンスベース(あるいはプロトタイプベース)を区別する
基準はできないだろうか、という話なんだが。
できれば>>822あたりからの流れを読んでもらえると助かる。
899:デフォルトの名無しさん
05/01/24 17:26:08
結局、
クラスを用いてオブジェクト生成に重みを置くなら「クラスベース」
クラスを用いないオブジェクト生成に重みを置くなら「インスタンスベース」
で良いんじゃない?
クラスからのオブジェクト生成後の変更可能性は生成になんら関わらないし、
インスタンスベースが“クラス”オブジェクトを持っていてはいけないという規定も無いし。
自称・他称が違うこともあるだろうが仕様が無い。
900:デフォルトの名無しさん
05/01/24 20:18:54
んで、インスタンスベースのうち、プロトタイプチェーンを持っているのが
「プロトタイプベース」?
プロトタイプへの参照を持たず、いっそcloneもできないインスタンスベースの
言語って考えられないわけじゃないよね。現実にあるかどうかは知らんけど。
901:デフォルトの名無しさん
05/01/24 21:46:36
C言語でオブジェクト指向するかの様に、
インスタンスベースやプロトタイプベースでクラス指向する、
って言い方もできるわけだよな。
構文糖衣の差や、クラスの探索等を組み込みでやるか、
自力でやるか程度の違い。
どこで線引きするかなんて個人の解釈でしかない。
この議論は無意味だ。
902:1
05/01/24 22:07:56
>>901
あなたにとって無意味かもしれないけど少なくとも私にとっては無意味じゃありませんね。
「プロトタイプベース」「インスタンスベース」についてはこのスレを見てもわかるように
言葉の定義がまだはっきりしていません。
(誰かが定義したしないという話ではなく広く一般に知れ渡った定義がはっきりしていないということ)
それを手探りで徐々に輪郭を作っていく議論は有益だと思いますよ。
ちょっと発散気味かもしれませんけど。
903:デフォルトの名無しさん
05/01/24 22:36:01
なんでプロトタイプベース言語作った作者に聞かないんだろう・・
904:デフォルトの名無しさん
05/01/24 22:38:50
>>902
いや、901が言いたいのは、823が言う言語表現なんてどうとでもなる
から、そこでの線引きについて議論することは無意味だってことだろ?
905:1
05/01/24 22:51:04
ちょっとまとめてみました。
815 「クラスの有無」
オブジェクトがクラスに委譲せずに起動可能なメソッドを持てるかどうか
メッセージ送信の実行機構による分類(852)
クラスベースで、インスタンスが自前の
メソッドや属性を自由にできない…という制約をといたのが、インスタンスベース(880)
とにかく、実質クラスにメソッドを定義しなければならなければクラスベース(891)
クラスもそれ自体が自身で起動できるメソッドを持てているわけではないのです(892)
インスタンスにメソッドをバインドできても、それを起動するための
しくみをクラスに仕込まなければならないならば、結局は同じことです(895)
クラスが存在する時点でクラスベースとおもわれ(888)
818 「実行時にオブジェクトが定義されるか」
実行前にオブジェクトの挙動が決定されるかどうか
クラスをコードとして記述できるかどうかの意味(820)
「記述できるインスタンス」と「記述できないクラス」は存在しない(833)
『実行時、今まさに作られるのならば』インスタンスベース
オブジェクトを生成する為の“メタオブジェクト”と呼べるものが
『既に作られていたのならば』クラスベース (857)
906:2
05/01/24 22:51:34
822 「ソース上のプリミティブな要素」
ソース上のプリミティブな要素がクラスなのかインスタンスなのか
実行機構および言語機能による分類ではなく、言語表現による分類(823)
827 「オブジェクトのリテラル表記の可否」
任意のオブジェクトを1つのリテラル表現として記述できるかどうか
言語表現による分類(852)
Javaの無名クラスはあくまでクラス
それをインスタンスに対してできてこそのインスタンスベース(856)
実行時に生成されるかコンパイル時に定数として生成されるかで振舞いが変わるかな?(861)
無名だろうとクラスにメソッドを定義しないといけないのならクラスベース(867)
ユーザーがクラスの介在を意識しないで済んでしまうような計らいがあるとき、
それはインスタンスベースだと言い切るのなら、それはそれで構わないと思う。
ただ、無用な議論を避ける ために、但し書きは必要(897)
899 「直交するものではないので重みづけで判断」
クラスを用いてオブジェクト生成に重みを置くなら「クラスベース」
クラスを用いないオブジェクト生成に重みを置くなら「インスタンスベース」
クラスからのオブジェクト生成後の変更可能性は生成になんら関わらないし、
インスタンスベースが“クラス”オブジェクトを持っていてはいけないという規定も無いし。
907:3
05/01/24 22:52:11
862(827派生) 「インスタンスベース≠プロトタイプベース」
インスタンスベースとプロトタイプベースを区別したほうがいいのかも
インスタンスベースだからといってプロトタイプという概念が必然かどうか(887)
インスタンスベースのうち、プロトタイプチェーンを持っているのが 「プロトタイプベース」?(900)
865 「インスタンスベース=プロトタイプベース」
プロトタイプベースとインスタンスベースとオブジェクトベースは同じものの別の呼び名です
自説大事に生粋のインスタンスベースを例外扱いかよ。 (864)
クラスベースの言語でも、無名クラスのような表現ができるのとできないのとがあるように、
インスタンスベースの言語でも、こういう表現ができるのとできないのがあっていい。 (878)
プロトタイプベースというと、プロトタイプの複製でオブジェクトを生じさせること
やプロトタイプチェーンによる委譲といった、特徴だけど、本質ではないところ
のみ取りあげて、やたらクラスベースと対比させたがる人が多いので困ります。 (881)
885(865派生) 「プロトタイプベースと呼ぶのはやめよう」
プロトタイプの語感からくる間違った認識で議論されるのは困ると思う。
だからインスタンスベースかオブジェクトベースと呼ぼう!
908:デフォルトの名無しさん
05/01/24 22:53:48
>>903
えーと。そのプロトタイプベースの言語を最初に作った当人が、クラスベースのアンチを
意識して、本質じゃないところを強調しちゃったもんだから、ややこしいことになっている
わけ。で、あとで客観的に分析して本質を突いてくれた本もあるんだけど、これが洋書で
高いから、誰も読んでないとくる。当然、インスタンスベースとかオブジェクトベースっても
通じやしないし、再三プロトタイプベースの別の呼び名だと言っているそばから、俺定義
をはじめるバカもいるってな始末でどーしようもない状態なのよ。
909:デフォルトの名無しさん
05/01/24 23:00:48
日本の、こんなスレの片隅で再定義してどうすんだよ
910:1
05/01/24 23:11:24
>>909
まぁそれもそうだけど、ここに書き込んでいる人は私含めて権威ある定義を知らないので
話が噛み合わなかったりしてはっきりさせたいってのがあるのではないかと。
>>908
その本読んでいるのだったら何が本質と書かれていたか教えて欲しいです。
>>904
901の「この議論」が指しているものが何かレスからは厳密に読み取れないのでなんとも・・・
823定義が独走しちゃっている感は確かにありますけどね。
911:1
05/01/24 23:16:03
オフトピですが次スレのスレタイはどうしましょうか。
・プロトタイプベース
・インスタンスベース
・オブジェクトベース
912:デフォルトの名無しさん
05/01/25 00:55:19
「インスタンスベース」
だけは、言葉に対するセンスが無いと思う。
913:デフォルトの名無しさん
05/01/25 01:34:30
>>912
なぜ?
プロトタイプベースは限定的なイメージを持たせがちだし、
オブジェクトベースはオブジェクト指向と混同しがち。
インスタンスベースなら、クラスとの背反という間違った発想を払拭してくれる
語感と併せて、よい落としどころだ思うけど。
けれど、プロトタイプベースで探してくる人が多いと思うから、今と同じ
プロトタイプベース・オブジェクト指向 2でいいんでないの? >>1に但し書き入れて。
914:デフォルトの名無しさん
05/01/25 01:45:19
インスタンスの定義はクラスから生み出されるオブジェクト、ですけど
915:デフォルトの名無しさん
05/01/25 01:46:01
>>913
instanceって言葉のの意味解ってる?
916:言っとくけど823じゃないよ
05/01/25 05:18:08
>>908
> 当然、インスタンスベースとかオブジェクトベースっても
> 通じやしないし、
このスレじゃ十分以上に通じてるじゃん(藁
> 再三プロトタイプベースの別の呼び名だと言っているそばから、俺定義
> をはじめるバカもいるってな始末でどーしようもない状態なのよ。
そいつ、再三にわたって「本来の定義は置いておいて、言語表現上のconstructs
から分類するとしたらどういう分類がありうるか、という議論をしている」と
いうようなことを言ってなかったか?
その議論に割り込んで「別の呼び名だ、馬鹿」と、マトハズレな痴態を晒す
マヌケもいるって始末でどーしようもない状態になったわけ。
しかも、constructsをsyntax sugarで覆えるわけないのにsyntax sugarだとか
言ってる大馬鹿もいるしでもう爆笑するしかないね。
917:デフォルトの名無しさん
05/01/25 10:40:43
>>914,915
「インスタンスベース」への受け入れ方で、その理解度がはっきりと
分かるというのはなかなかおもしろい効能だ。
918:デフォルトの名無しさん
05/01/25 11:34:59
>>908
その高い本の書籍名とISBN番号希望!
昔は洋書読まなかったんだけどAmazonができてから良く読む用になったんよ、
良い本あれば元値にはこだわらないから教えてほしい。
(昔は入手が大変だったのと$1 = \130の頃でも200円換算とかされてとても買う気になれんかった)
919:デフォルトの名無しさん
05/01/25 12:14:18
>>916
定義もおぼつかない状態で言語表現上の構造概念を論じること
は可能なの?
920:デフォルトの名無しさん
05/01/25 13:40:28
>>919
> 定義もおぼつかない状態で言語表現上の構造概念を論じること
> は可能なの?
言語表現上の構造や概念から定義しようという議論であることがまだ理解できない?
921:デフォルトの名無しさん
05/01/25 15:48:43
>>918
0387947752
922:デフォルトの名無しさん
05/01/25 17:54:48
A Theory of Objectsだね?
ありがとん。
923:デフォルトの名無しさん
05/01/25 18:28:44
>>913
プロトタイプ言語のクラスレスなオブジェクトはinstance っていう言葉の持つ自然な意味と
全く合致していない(むしろ対立している)から「インスタンスベース」っていう言葉はまずいでしょ。
英語としての言葉の意味なんてどうでもいいっていうなら、メソッドベースでもフレームベースでも
moon base でも何でもいいじゃん。
924:デフォルトの名無しさん
05/01/25 19:25:03
>>923
moon base は如何なものか。
せめて white b(ry
925:デフォルトの名無しさん
05/01/25 20:06:44
>>923
謎のの方か?、アルファの方か?、これで年齢が一回りは異なる訳であるが。
926:デフォルトの名無しさん
05/01/25 21:10:27
オブジェクトベース言語に「クラスがない」なんてのは常識の嘘。
そんなことにこだわっていると、かえって本質の理解を妨げるよ。
927:デフォルトの名無しさん
05/01/25 22:08:55
>>921は親切で教えてあげたのだろうが、これじゃひろゆきがしかけた
「電話番号張り付け検出スクリプト」にひっかかって警察に通報されてそうだ。
928:デフォルトの名無しさん
05/01/25 22:17:33
英語に疎いので辞書を引きました。
URLリンク(www2.alc.co.jp)
| instance
| 【名-1】 場合{ばあい}、事実{じじつ}、(事実{じじつ}を例証
| {れいしょう}するための)例、事例{じれい}
これだけではよくわからんが、
| * instance a case of
| 〜の一例{いちれい}を挙げる
ってのがあるから、
「(クラスのような)テンプレートに相当するようなものがあり、
その中のひとつの例、実体」
ってニュアンスなのかな。だとすると「インスタンスベース」はまずいね。
「オブジェクトベース」では、いまや「普通」の(クラスベースの)OO言語を
指してしまいそうだし、
「プロトタイプベース」では、もしプロトタイプチェーンを持たないような
言語があったら困る。
さあ困った。
929:デフォルトの名無しさん
05/01/25 22:22:40
>>921
AmazonのURLはISBN番号を含んでいる事をたった今知りました。
A Theory of Objects (Monographs in Computer Science)
URLリンク(www.amazon.co.jp)
930:デフォルトの名無しさん
05/01/26 00:03:48
7000円は流石に高すぎる
931:デフォルトの名無しさん
05/01/26 00:16:53
>>930
Gemsの原書もそんなものだし、普通じゃないかな?
932:デフォルトの名無しさん
05/01/26 00:24:02
プロトタイプベースを感じとりたいくらいで手を出せる本じゃないな。
933:デフォルトの名無しさん
05/01/26 00:26:38
>>932
そんだけだったら俺も手はださんだろうけど、専門書だったら普通じゃないか?
俺は技術書系の活字中毒だからなぁ、このくらいの値段の本だと年に10冊じゃ効かないかも。
#金がないときゃ図書館にお願いするが。
934:デフォルトの名無しさん
05/01/26 22:53:50
>>921
この書込にはおそらく電話番号書込自動警察通報システムが働いた
935:デフォルトの名無しさん
05/01/26 23:00:22
>>934
でも03でこの長さは電話番号じゃないからなぁ。
936:デフォルトの名無しさん
05/01/27 11:27:26
>>935
03-8xxx はないよね。3xxx と 5xxx だけ?
937:デフォルトの名無しさん
05/01/28 13:55:03
よく分かっていない人たちによる
よく分かっていないものに対する
たぶん、こんなもんだろうという
言語表現上の定義、まだぁ?
938:デフォルトの名無しさん
05/01/29 11:35:28
>925
SHADOだろ(w
939:デフォルトの名無しさん
05/01/29 13:10:49
>>938
制作はどっちもITCなんだがなぁ、10年以上の開きがあるんだよなぁ。
コーニッグ司令官とストレイカー長官じゃ。
940:デフォルトの名無しさん
05/01/29 14:54:02
粘着の発生により、誰もいなくなりました。
======== 終 了 =========
941:デフォルトの名無しさん
05/02/03 20:37:55
定義の話なんてやめればいいだけ
942:Javaのスイッチ文のように作用し、
05/02/03 20:55:50
だな。
943:デフォルトの名無しさん
05/02/07 19:49:57
Methodの呼び出しを効率よくJIT化ってできないもんでしょうか?
単純にテーブル生成するとメモリ食ってヒドイ目に遭うんです。
944:デフォルトの名無しさん
05/02/11 01:27:14
>>943
Methodの呼び出し部分をJIT化して効率よくなるってことは、
呼び出されるMethodの方は、当然JITコンパイルされてるんだよね?
945:デフォルトの名無しさん
05/02/11 02:24:20
>>943
CPUの分岐予測みたいに以前のメソッド呼び出しだけを保存しておいて、
次回の関連オブジェクトの状態も不変なら<抽象的でごめん
そのままコール、だめならもっと上位の定義から辿る。
以上素人考え……遅そう。
>>944
たぶんCPUのキャッシュ効率を考えてるんじゃないかな。
946:デフォルトの名無しさん
05/02/18 23:32:39
ECMAScript 関連で参考になるサイト。
Effective JavaScript(URLリンク(www.interq.or.jp))
JavaScript 深層(URLリンク(www.hawk.34sp.com))
結構当てになると思うけどどうよ?
947:デフォルトの名無しさん
05/02/19 00:43:20
別に
948:デフォルトの名無しさん
05/02/20 18:31:11
というか全然
949:デフォルトの名無しさん
05/02/20 18:32:35
>>947-948
殺してやる
950:デフォルトの名無しさん
05/02/20 18:33:38
>>949
殺して姦る
951:デフォルトの名無しさん
05/02/20 21:12:37
>>947
>>948
どの辺が?
952:デフォルトの名無しさん
05/02/22 23:39:31
今作ってる俺言語に、プロトタイプベース(オブジェクトベース?)風のOOの
機能を盛り込もうとしています。
言語そのものは、C風の文法の形無し言語です。
んで、
o = new_object();
とすることで、o.hoge 形式で参照可能な連想配列が取得できるようにする。
そうすれば、後はクロージャを実装するだけで、
new_point(x, y) {
o = new_object();
o.x = x;
o.y = y;
o.move = function (x, y) {
o.x += x;
o.y += y;
}
}
なんて形で、そこそこそれっぽいものが書けそうな気がするんですが、
どんなもんでしょうか。
そんなのOOじゃねえ、とか、それじゃ実装できんだろ、とか、
気が付くところがあったら教えてくださいませ。
# プロトタイプチェーンはもちょっと後で考えるつもり。
953:デフォルトの名無しさん
05/02/23 08:32:12
o.hogeに関数を設定するのと関数の返り値を代入するのはどう書き分けるの
954:デフォルトの名無しさん
05/02/23 09:11:38
>>953
普通に{...}があるかないかじゃダメなのか?
955:デフォルトの名無しさん
05/02/23 11:49:56
>>953
functionって関数名じゃなくて関数宣言の予約語じゃないの?
956:デフォルトの名無しさん
05/02/23 14:21:33
WEB制作板にカエレ
957:952
05/02/24 00:23:25
>>953-955
反応ありがとう。
>>955が正解で、functionは予約語です。
んで、>>952ではいくつかポカしてて、通常の関数定義の際もfunctionは
必要で、かつ、new_point()はただの関数なので、>>952のリストは実際にはこうなります。
function new_point(x, y) {
o = new_object();
o.x = x;
o.y = y;
o.move = function (x, y) {
o.x += x;
o.y += y;
}
return o; ←returnが必要
}
関数のネストは今のところ考えてないので、スコープは、
・グローバル
・関数内ローカル
・ネストした分のクロージャ
になるんじゃないかと思ってます。
958:デフォルトの名無しさん
05/02/24 10:45:47
プロトタイプ・チェーンの無いものはプロトタイプベース・オブジェクト指向言語と呼ぶべきでない、
みたいな議論、どーでもいい話で盛り上がってるっぽくてワラタ
そんなん、プロトタイプとなるインスタンスへの委譲がなくとも、
インスタンスをプロトタイプとして新しいインスタンスを作るんだから、プロトタイプ〜でええやん。
こーゆーつまらん議論を喧喧ガクガクやって、しまいには辞書まで引っ張り出してくるのって、
きっと(ry
959:デフォルトの名無しさん
05/02/24 10:55:24
一見意味がありそうで、実はとってつけたどーでもいい話を延々するのは、文系人間のビョーキだな
960:デフォルトの名無しさん
05/02/24 22:08:44
>>958
そーゆーつまらん議論はとっくに終わっているのに、わざわざほじくりだして
しかもageるのって、きっと(ry
961:デフォルトの名無しさん
05/02/27 12:58:24
そして誰もいなくなったらしい…
1000目前でこれは悲しいので、一応ageとく。
次スレはいらないの?
962:デフォルトの名無しさん
05/02/27 15:26:12
>>961
ノ
963:デフォルトの名無しさん
05/02/27 15:29:24
次スレは、「POO総合スレ」的なのがいいな。
964:デフォルトの名無しさん
05/02/27 21:56:44
タイトルにインスタンスベースも入れて欲しい。
965:デフォルトの名無しさん
05/02/27 22:52:20
このスレは
頭が痛くなるだけで
何も生み出さない
次スレは*無し*の方向で
966:デフォルトの名無しさん
05/02/28 00:24:42
>>965
あんたの頭が足りないのをスレのせいにされてもなあ…
上のほうには有意義な議論もあったろうに。
967:デフォルトの名無しさん
05/02/28 01:09:09
有意義か?www
結局ここに書き込んでる奴は、何がしたいわけ?
>>3-4みたいなマイナー言語並べて各自の勝手な解釈で
分類の仕方に終始してるだけというか。
何が有意義なのかねえ・・
言語ごとに専用スレ立てれば?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5405日前に更新/368 KB
担当:undef