[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 05/09 16:57 / Filesize : 45 KB / Number-of Response : 200
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

{_proto: プロトタイプベース・オブジェクト指向};



1 名前:デフォルトの名無しさん [05/03/05 00:08:47 ]
実装談義も哲学論議も。


プロトタイプベース・オブジェクト指向とは sumim.no-ip.com:8080/wiki/493
Google Directory Prototype-based directory.google.com/Top/Computers/Programming/Languages/Object-Oriented/Prototype-based/
Self research.sun.com/research/self/
Io www.iolanguage.com/
ほか >>2-10あたり

前スレ
 プロトタイプベース・オブジェクト指向
 pc5.2ch.net/test/read.cgi/tech/1070886635/

162 名前:デフォルトの名無しさん mailto:sage [2006/03/02(木) 09:51:04 ]
>>161
根底のObjectに後から何かつっこんで全部の階層から使えるとか(w


163 名前:デフォルトの名無しさん mailto:sage [2006/03/02(木) 10:01:55 ]
それって、クラスベースでも動的言語ならObjectクラスにあとから追加とか出来るじゃん。

ただ、ネームスペースがしっかりてない言語でこれは勘弁して欲しい。
メンバを舐めてる処理が突如おかしくなるw

164 名前:デフォルトの名無しさん mailto:sage [2006/03/02(木) 10:11:34 ]
>>163
JavaScriptで良くあるんだよね orz


165 名前:デフォルトの名無しさん mailto:sage [2006/03/03(金) 00:54:28 ]
>>162
静的言語でも極一部(MixJuiceやDelphiや字面上だけならC#3.0も)はできるぞ

166 名前:デフォルトの名無しさん mailto:sage [2006/03/03(金) 11:30:15 ]
(内部的にも)新規にクラスを作ったり、そうしたものを介したりせずに…という
“しばり”を設けたら、どうよ…。

167 名前:デフォルトの名無しさん [2006/03/03(金) 14:25:52 ]
縛る意味が分からない。マニアの方ですか?

168 名前:デフォルトの名無しさん mailto:sage [2006/03/03(金) 23:12:50 ]
あえて縛りを設けることで、頭の弱い奴が同一視するものとの違いを際だたせる
ことができるってことだろ。まあ、そんな程度じゃ馬鹿の壁は越えられんのだが。

169 名前:デフォルトの名無しさん mailto:sage [2006/03/03(金) 23:19:22 ]
と、バカが申しておりますが、どないしますか?

170 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 22:29:01 ]
たしかにクラスの助けを借りずにインスタンスが独自のスロットを持てるのは
いっけん効率いいようにおもえるけど、そもそもベーサルで効率悪いシステムだから
なぁ…。びみょー。



171 名前:デフォルトの名無しさん mailto:sage [2006/06/05(月) 00:17:54 ]
 

172 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 05:43:29 ]
プロトタイプ言語って、メソッドはプロトタイプ毎に保持しているんだよね?

173 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 08:41:00 ]
>>172
そういうこともするが、それだけとは限らない。

174 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 11:02:53 ]
他のプロトタイプに委譲することも多いよね。

175 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 11:28:24 ]
つか、自分で持つか委譲しかないんだが…。

176 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 16:44:49 ]
・共有する
・コピーする
つうのもあるよ。


177 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 20:54:41 ]
>>176
共有する … 委譲
コピーする … 自分で持つ

178 名前:デフォルトの名無しさん mailto:sage [2006/06/11(日) 02:00:59 ]
共有する->所有権あり
委譲する->所有権なし

コピーする->オリジナルが存在
自分でもつ->オリジナルの有無は不明

つう感じかね。

179 名前:デフォルトの名無しさん mailto:sage [2006/06/11(日) 10:04:42 ]
いずれにせよ、委譲するか、その必要がないかに帰着できる。

180 名前:176 mailto:sage [2006/06/11(日) 14:37:11 ]
だからそれだけじゃ足りないんだって。
委譲するかどうかだけではリソースの扱いを決定できないんだって。

委譲しない(=自分が所有権を持つ)としても、もし他と共有するとなるとそのリソース
(メソッド)を勝手に加工できないから、それなりの扱いが必要でしょ

コピーするかどうかは、初期化の場面しか関係しないけどな。




181 名前:デフォルトの名無しさん mailto:sage [2006/06/11(日) 18:29:11 ]
それは小手先に過ぎなくて、なんというか本質から外れているような。

182 名前:デフォルトの名無しさん mailto:sage [2006/06/11(日) 19:07:05 ]
ああ。なんか分かってきたぞ。

176は、継承(あるいはインスタンス化、もしくはクローン化)の様式を整理したいのか。
それならコピーがどうのこうのってのも分かる。
たしかに、委譲の他に、手続きを共有する方法と、コピーを持ってしまう方法がある。

まあ、172がそもそも何を聞きたいのかわからんというのが問題なのだが…。
「プロトタイプ毎」というのはおかしいから「プロトタイプ(ベースの)言語」のプロトタイプに
引っ張られて「オブジェクト毎」とするところを書き(あるいは理解し)間違えたと解釈して、

「オブジェクト毎にメソッドを持つかどうか」

と問われているとすれば、そういうこともあるし他者に委譲することもある、と答えるし、そうではなく、

「クローン(多くの場合チャイルド)はプロトタイプ(多くの場合ペアレント)にメソッドを持たせるのか」

と問うているのならば、それ、つまり、委譲機構以外にも自前でコピーで持ったり(クローン、コピー)、
プロトタイプと共有する(シャローコピー)のこともある、という176のような答になる。

183 名前:172 mailto:sage [2006/06/11(日) 19:45:16 ]
スンマせん。過疎スレだったので、ちゃんと整理せずに軽い気持ちで書き込みますた。

プロトタイプ言語のインタープリタを作る時に、メソッドの一覧は何処に持たせるのが
良いのかなというのが最初の疑問です。

何処に?
・グローバルに 1 つ
・メソッド名毎に 1 つ(ジェネリックな感じで)
・オブジェクト毎(プロトタイプもオブジェクトに含む)

どういう形式で?
・リスト
・ハッシュ

クラスベースな言語なら、クラス毎にハッシュでメソッドリストを持たせてもそんなに
オーバーヘッドな感じはしないですが、プロトタイプ言語でオブジェクト毎にハッシュを
持たせたら、個々のオブジェクトのサイズが大変な事になりそうで。

今考えているのは、オブジェクト毎にメソッドのリストを持たせて、グローバルにハッシュで
キャッシュを持つ感じです。io なり javascript なりの実装を調べてみます。

184 名前:デフォルトの名無しさん mailto:sage [2006/06/11(日) 19:57:27 ]
>>183
最初からそう言えや (´・ω・`)

例えば io はオブジェクト毎にハッシュテーブルを1つ持ってる。
他は知らないけど。


ちなみに 『プロトタイプもオブジェクトに含む』 みたいな文が出てくる時点で、
あまりプロトタイプベースについて詳しくないんじゃないかなとか予想してたり。

185 名前:172 mailto:sage [2006/06/11(日) 20:14:36 ]
>>184
重ね重ねスミマセン。

プロトタイプは、単に他のオブジェクトのプロトタイプスロットから参照されているだけで、
実態は普通のオブジェクトだと思ってました。

186 名前:更紗 ◆SARAHxmkr. mailto:sage [2006/06/15(木) 04:23:03 ]
// 継承前
function Person(nAge) {
this.m_nAge = nAge;
}

Person.prototype.getAge = function() {
return this.m_nAge;
};

// 継承先
function Programmer(nAge, strProject) {
this.__super = Person; // 新インスタンスを介して
this.__super(nAge); // 継承元コンストラクタを呼ぶ
this.constructor = Programmer; // コンストラクタが Person にセットされるので元に戻す
delete this.__super;
/* Programmer コンストラクタの処理 */
}

// 継承先の方法2つ目
function Programmer(nAge, strProject) {
Person.call(this, nAge);
this.constructor = Programmer;
/* Programmer コンストラクタの処理 */
}
このコードでPersonのプロパティをProgrammerのプロパティで継承する際に、
Person(nAge)として、親のコンストラクタを呼んで
値を初期化せずに、スコープを変更して呼びしているのは、
そうしないと、値へのアクセスがインスタンスを介して出来なくなるからですか?
いまひとつ変数のスコープが理解できません。
Personクラスのthis.m_nAge = nAge;を呼び出しても、
インスタンスがthisに入るので、インスタンスの変数としてm_nAgeが初期化され
そうに思えてしまいます。

187 名前:更紗 ◆SARAHxmkr. [2006/06/15(木) 04:24:59 ]
 

188 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 15:47:53 ]
>>186
this には、その関数を起動する際の第一オペランド(ドット演算子の前にあるオブジェクト)が束縛されています。
メッセージングメタファで言えば、メッセージの受け手であるレシーバですね。(どちらでも、お好きな方で)

new Programmer(21, "EJS"); で起動された Programmer 内において、this には、新しく作られたインスタンス
(ここでは仮に this_prog と呼称することにします)が束縛されています。その場で this.__super(nAge); により
起動、つまり、this_prog.__super(nAge) で起動された Person 内では、this は this_prog を束縛することになります。

ですから、Person 内の this.m_nAge = nAge; は、つまり this_prog.m_nAge への nAge の束縛ということに
なるので、戻ってくると新しく作ったインスタンスの m_nAge スロットには 21 が束縛されている…というカラクリです。

もし、__super スロットを介さずに、ただ Person を起動しただけでは、第一オペランドが省略時のグローバル
オブジェクト [object global] になってしまうので、Person 内の this もそうなってしまい、m_nAge スロットも
グローバルオブジェクトに作られてしまいます。

189 名前:デフォルトの名無しさん mailto:sage [2006/06/15(木) 22:53:19 ]
>>188
なるほど、そういう風に規定されているのですね。
勉強不足ですいません・・・ありがとうございます

190 名前:更紗 ◆SARAHxmkr. mailto:sage [2006/06/15(木) 23:22:21 ]
>>612
// 継承前
function Person(nAge) {
this.m_nAge = nAge;
}

Person.prototype.getAge = function() {
return this.m_nAge;
};

// 継承先
function Programmer(nAge, strProject) {
this.__super = Person; // 新インスタンスを介して
this.__super(nAge); // 継承元コンストラクタを呼ぶ
this.constructor = Programmer; // コンストラクタが Person にセットされるので元に戻す
delete this.__super;
/* Programmer コンストラクタの処理 */
}

// 継承先の方法2つ目
function Programmer(nAge, strProject) {
Person.call(this, nAge);
this.constructor = Programmer;
/* Programmer コンストラクタの処理 */
}

まあ、これなんだけどね。
Person.call(this, nAge);
ここが何でこうなるんだろうと凄く不思議に思った。
prototype.jsはどうやってクラスみたいな仕組みを実装してるんだろうか。




191 名前:更紗 ◆SARAHxmkr. mailto:sage [2006/06/15(木) 23:23:16 ]
すいません・・・誤爆しました。。
きにしないでください

192 名前:デフォルトの名無しさん [2006/10/09(月) 11:42:23 ]
prototypeのAjax.UpdaterってFireFoxで動かない?
evalScripts:trueで使いたいんだけど、どうも動かない。既出?

193 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 12:28:20 ]
>>192
板違い。こっち池。
+ JavaScript の質問用スレッド vol.51 +
pc8.2ch.net/test/read.cgi/hp/1158468856/

194 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 12:34:58 ]
>>193
あああ・・・そっちもスレ違いなので変なの誘導しないで・・・

195 名前:デフォルトの名無しさん [2006/12/10(日) 01:29:51 ]
JavaScriptは大流行りなのに、こっちは寂れてしまったな

196 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 01:39:01 ]
>>195
でもその話しちゃうと現場での愚痴大会になっちゃうからなぁ。


197 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 01:48:43 ]
寂れてもチェックは欠かさない

198 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 13:43:52 ]
JavaScriptでもプロトタイプ継承をバリバリ使ってるやつは例外中の例外だろ

199 名前:デフォルトの名無しさん mailto:sage [2007/01/04(木) 23:05:10 ]
冬休み中にself似の言語にnative型の概念入れようと努力したけどムリポ







[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<45KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef