[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/09 23:17 / Filesize : 368 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

プロトタイプベース・オブジェクト指向



1 名前:デフォルトの名無しさん [03/12/08 21:30]
オブジェクトを複製または継承によって生成を行う言語,
プロトタイプベース・オブジェクト指向言語について語りましょうよ.

関連リンク >>2


577 名前:1 mailto:haskellsaikou [04/08/12 00:25]
クラスベースに比べると、記述量的に見てプロトタイプベースは厳しいですかね。

最近Haskell勉強してるんですけど、
「頻繁に使用する少数の道具」が揃っているところが強みだと感じています。
再帰系の高階関数とかコンビネータとか。

そういう厳選された道具がオブジェクト指向の世界にも存在するのかなぁ。
もしあればそれを探し出して、組み込んだ言語ならクラスベースに匹敵するかも。

Lightweight Language が流行っているように
如何に簡単に多くのことを行えるか、がこれからの言語争いで重要だと思います。
# 言うまでもないけど

578 名前:デフォルトの名無しさん mailto:sage [04/08/18 02:59]
実際ゲームのスクリプトなんかに向いてるみたい。
diablo2 のjspというBOTはjavascript。
まあまあ使いやすかった。
プロトタイプベースである必要はあんまない気がするが。

579 名前:デフォルトの名無しさん mailto:sage [04/08/18 08:11]
というか、使う人が手を入れることを前提とする場合クラスよりもプロトタイプのほうが扱いやすい。


580 名前:デフォルトの名無しさん mailto:sage [04/08/18 15:41]
HTML に埋め込むタイプの小規模スクリプトだと、プロトタイプの独壇場。

581 名前:デフォルトの名無しさん mailto:sage [04/08/18 16:44]
>>580
ボタンや IMG の挙動を変えるのにいちいち別クラスにしたくないな、確かに。

582 名前:デフォルトの名無しさん mailto:sage [04/08/18 22:00]
構文的な言語の特殊性としては、
やっぱJavaScript程度のものが妥当なんだと思った。
LispやSmalltalkみたいな変則的なものは知ってる人じゃないと近寄りがたい。
手軽にtarget.xとかドット表記でオブジェクトを指定できるのもいい。
なんだかんだ言ってもCかPerlなら知ってる人多いからね。
jspのスクリプトがあそこまで普及したのはライブラリの質の高さもあったけど、
構文的なわかりやすさが影響してると思う。
プロトタイプベースとあんま関係なくてごめん。

583 名前:デフォルトの名無しさん mailto:sage [04/08/22 00:46]
もまいらが使ってるプロトタイプベース言語で数行程度のサンプルコード書いてみてくれないか?

584 名前:デフォルトの名無しさん mailto:sage [04/08/22 01:12]
>>583
何か興味あるところで“お題”を出してもらえればすぐに。
でなければ、普段使っているクラスベースで数行のサンプルを
提示してくれれば、それと同等のものを書きます。

585 名前:デフォルトの名無しさん mailto:sage [04/08/22 02:48]
>>583

INU:
[ "WAN! WAN!" mise. ] naki<
[ "GATU GATU" mise. ] tabe<
tabe.
naki.

INU! NEKO<

NEKO:
tabe.
naki.

[ "NIAO NIAO" mise. ] NEKO.naki<

NEKO.naki.
INU.naki.


実行結果
GATU GATU
WAN! WAN!
GATU GATU
WAN! WAN!
NIAO NIAO
WAN! WAN!



586 名前:デフォルトの名無しさん mailto:sage [04/08/22 16:03]
class Thread2ch {
static int resNumber;
public:
  virtual void hosyu() = 0;
  virtual int resWrite(std::string contents, bool isSage = true) = 0;
};
class PrototypebaseOOThread : public Thread2ch {
  void hosyu()
  {
    ・・・
  }
  int resWrite(std::string contents, bool isSage = true)
  {
    ・・・
    return ++resNumber;
  }
};

int main()
{
  PrototypebaseOOThread *anObject = new PrototypebaseOOThread();
  anObject->resWrite("ぬるぽ");
  delete anObject;
  return 0;
}
//コードでスレッドの保守を表現する感じでお願いします。
//言語名もかいてくれると(゜д゜)ウマ
//で、585氏早速ありがとうございます

587 名前:デフォルトの名無しさん mailto:sage [04/08/22 16:14]
>>586
それのドコがプロトタイプベースやのん?

588 名前:デフォルトの名無しさん mailto:sage [04/08/22 16:30]
>>587 に同意。もう少しプロトタイプベースっぽいお題でないと。
というわけで >>585 を上でちらりと出た Io で書いてみる。

Dog := Object clone do(
 bark := method( "WAN! WAN!" linePrint )
 eat := method( "GATSU GATSU" linePrint )
)
Dog eat
Dog bark

Cat := Dog clone

Cat eat
Cat bark

Cat bark := method( "NIAO NIAO" linePrint )
Dog bark
Cat bark

実行結果
GATSU GATSU
WAN! WAN!
GATSU GATSU
WAN! WAN!
NIAO NIAO
WAN! WAN!

犬の派生に猫ってのも妙だけどなー。

589 名前:585 mailto:sage [04/08/22 18:25]
>>586
ほとんど知る人のない梓弓スクリプトという言語です。
なんとか直訳的に写すとこんな感じかなあ。でも、
>>587>>588に同感で、プロトタイプベースと
クラスベースでは、書く時の考え方も変わってしまうと思う。
---

@! Thread2ch< Thread2ch:
0 resNumber<
[ ] hosyu<
[ contents< isSage< 0 ] resWrite<

Thread2ch! PrototypebaseOOThread< PrototypebaseOOThread:
[
(略)
] hosyu<
[ contents< isSage<
PrototypebaseOOThread.resNumber resNumber<
(略)
resNumber 1 age, resNumber> ] resWrite<

[
0 "ぬるぽ" PrototypebaseOOThread.resWrite.
0 ] @.main<

---
梓弓はごらんの通りの後置記法で、「<」は代入、「>」は値の取出し、
「@」は始原オブジェクト、「!」はコピーの作成、など。

>>588
猫じゃなくて普通にポチとかにすると、「ポチ is a 犬」だから
クラス・インスタンス関係みたいになってちょっとかな…と。

590 名前:デフォルトの名無しさん mailto:sage [04/08/22 18:34]
流れを断ち切るようで申し訳ないのですが
プロトタイプベースは、親のスロットを変更すると子にまで影響及ぶんでしたっけ?

591 名前:デフォルトの名無しさん mailto:sage [04/08/22 18:41]
>>590
デリゲーションチェインがあればどうなるかは考えればわかるだろ

592 名前:デフォルトの名無しさん mailto:sage [04/08/22 18:50]
>>590
言語によりけりじゃないのかなあ?
JavaScript なら影響及ばなかった気がする。
梓弓だと影響及ぶけどね。

INU.tabe.
INU.naki.
NEKO.tabe.
NEKO.naki.
[ "PAKU PAKU" mise. ] INU.tabe<
[ "KYAN KYAN" mise. ] INU.naki<
INU.tabe.
INU.naki.
NEKO.tabe.
NEKO.naki.

実行結果
GATU GATU
WAN! WAN!
GATU GATU
NIAO NIAO
PAKU PAKU
KYAN KYAN
PAKU PAKU
NIAO NIAO

593 名前:590 mailto:sage [04/08/22 19:07]
>>591>>592
親のスロットを変更した際の挙動がプロトタイプベースの定義に
含まれているか知りたかったんでス
即レスdくすでした

594 名前:デフォルトの名無しさん mailto:sage [04/08/23 21:04]
>>586
なにかと思ったら、プロトタイプベースで書いて欲しいコード
だったんですね。仮想関数あたりはモディファイしてあります。

#Io
Thread2ch := Object clone
Thread2ch resNumber := 0
Thread2ch resWrite := method(contents, isSage,
return(resNumber += 1))
Thread2ch hoshu := method(
return(resWrite("保守",self)))
ProtoBasedOop := Thread2ch clone
ProtoBasedOop resWrite("1げっと",Nil)
==> 1
ProtoBasedOop hoshu()
==> 2
ProtoBasedOop resNumber
==> 2
Thread2ch resNumber
==> 0

595 名前:デフォルトの名無しさん mailto:sage [04/08/24 00:21]
梓弓スクリプトってなんじゃググっても無いぞ



596 名前:デフォルトの名無しさん mailto:sage [04/08/24 00:43]
今時は誰でも俺言語の一つくらいは持ってるだろうから、その類いじゃね?

597 名前:1 mailto:sage [04/08/24 00:50]
soopyです。
てこんな単純じゃ言語の特徴あまり出ませんね。

dog = {
bark: ({arg:[x]; do:[println "WAN! WAN!"];} eval);
eat: ({arg:[x]; do:[println "GATSU GATSU"];} eval);
};
dog eat bark();
dog bark ();

cat = dog + {};
cat eat ();
cat bark ();

cat bark = {arg:[x]; do:[println "NIAO NIAO"];} eval;
dog bark ();
cat bark ();


598 名前:デフォルトの名無しさん mailto:sage [04/08/24 00:56]
>>595
ぐぐったら下のほうに出てきたけど、>>596の類いだな。
まあなんか高い志掲げてるし、将来に期待すれ

599 名前:デフォルトの名無しさん mailto:sage [04/08/24 12:41]
ごめん、例の俺言語の類だが宣伝させてくれ
人少なすぎで少し困ってる
微妙にプロトタイプベースじゃないが勘弁

# Petit Script
Root
  create -> Dog;
Dog
  <- bark { System puts "Wan! Wan!" }
  <- eat { System puts "Gatsu Gatsu" }
  bark
  eat
  create -> Cat
  bark
  eat
  <- bark { System puts "Niao! Niao!" }
  bark
  eat;
Dog
  bark
  eat;

600 名前:599 mailto:sage [04/08/24 12:41]
続き

# 実行結果
Wan! Wan!
Gatsu Gatsu
Wan! Wan!
Gatsu Gatsu
Niao! Niao!
Gatsu Gatsu
Wan! Wan!
Gatsu Gatsu

From: 今新しい言語を作ってます
ttp://pc5.2ch.net/test/read.cgi/tech/1054580836/l50

601 名前:586 mailto:sage [04/08/24 15:28]
なんだかしょぼいお題コードを書いてしまったようで・・・
Javascriptあたりから出直してきます。_| ̄|○

602 名前:デフォルトの名無しさん mailto:sage [04/08/24 20:20]
>>598
ググって出てきたの?

「梓弓スクリプト」でググったら該当無し
「梓弓 スクリプト」でググってもそれらしいのは見当たらず
「梓弓 script」も同様
「梓弓」だけじゃワケワカメだった。

ちょっと興味があるんでキーワード教えてくださいな。

603 名前:デフォルトの名無しさん mailto:sage [04/08/25 00:01]
>>602
「梓弓 スクリプト」でぐぐると、
三つめくらいに時候の挨拶っていうのがあって、
そこからリンクたどると見つかるよ。

604 名前:デフォルトの名無しさん mailto:sage [04/08/25 04:57]
別に無断リンク禁止サイトではないのだから
ずっと時間が経ってからスレを見る人のために
ちゃんとリンクしたほうが良いと思いませんか?

梓弓について
gr.vxx.jp/azusayumi.html
リンクに関する見解
gr.vxx.jp/link.html

605 名前:デフォルトの名無しさん mailto:sage [04/08/25 08:36]
なんで記号的、全時代的な構文のスクリプトばっかなんだ?
Ruby厨と言われるかもしれないけど、RubyのようにクラスベースOOの人でも
違和感無く扱えるような構文の方が良くない?



606 名前:デフォルトの名無しさん mailto:sage [04/08/25 08:43]
>>605
もっと具体的に

607 名前:デフォルトの名無しさん mailto:sage [04/08/25 08:57]
>>603-604
ありがとん

608 名前:デフォルトの名無しさん mailto:sage [04/08/25 09:12]
>>605
スクリプトに限らず俺言語ってのは基本的にオナニーだからだろ。

609 名前:デフォルトの名無しさん mailto:sage [04/08/25 09:26]
プログラミング言語といっても、わかり易い言語にする為には自然言語的なセンスが
必要だとは思う。かといって Smalltalk みたいに英語に近くするとネイティブ以外に
分かり辛い所も。

610 名前:デフォルトの名無しさん mailto:sage [04/08/25 12:00]
>>605
ってかRubyはクラスベースじゃないの?SeRubyのこと?

漏れはある程度記号が使われるコードのほうがいいなぁ。JavaやPythonとかだと記号が少ないと感じる。


611 名前:1 mailto:sage [04/08/27 22:02]
>>599
おお、言語作ってますか。いいですねぇ。
ちょっと今時間的余裕ないのですが、
そのうち触らせてもらいます。
開発頑張ってください。


612 名前:デフォルトの名無しさん mailto:sage [04/08/28 22:46]
Ruby知ってると幸せになれるよ

JavaScript程ではないけど

613 名前:デフォルトの名無しさん mailto:sage [04/08/29 07:45]
宣伝乙。
このスレに Ruby 知らないヤツは居ないと思うが。

614 名前:デフォルトの名無しさん mailto:sage [04/08/29 18:19]
>>613
ノシ

名前を知ってはいるけど見たこと無い
使わないし

615 名前:デフォルトの名無しさん mailto:sage [04/08/30 00:47]
今日日うっかりデフォインスコとかすると/usr/binあたりに居ないか?>Ruby
てかWinとかだと自前で入れないと入らんか



616 名前:デフォルトの名無しさん mailto:sage [04/08/30 05:46]
Rubyはそろそろ廃れてきたからね
やっぱどこでも使えるJavaScriptがいいよ

617 名前:デフォルトの名無しさん [04/10/25 17:38:23]
Selfの論文翻訳されてるよage
ttp://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/p/self/self.html

618 名前:デフォルトの名無しさん mailto:sage [04/10/25 18:44:46]
traits使って説明しだした辺りからうさん臭さを感じた

619 名前:デフォルトの名無しさん mailto:sage [04/10/25 20:48:59]
>>618
具体的にはどんなふうに?

620 名前:デフォルトの名無しさん mailto:sage [04/11/05 23:16:06]
相変わらず人いないね

621 名前:デフォルトの名無しさん mailto:sage [04/11/06 01:14:41]
>>618
今までずっと「tetris使って説明しだした辺りからうさん臭さを感じた」と読んでた。


622 名前:デフォルトの名無しさん mailto:sage [04/11/06 01:19:24]
>>620
つーか、最初から2-3人で回し書きしてるのがミエミエだったろ(藁
プロトタイプ最強君と、クラスベースも等価君と、バランス君。


623 名前:デフォルトの名無しさん mailto:sage [04/11/06 03:45:34]
各自が俺言語を持ち寄って自慢するスレでもいいんじゃね?

624 名前:1 mailto:sage [04/11/14 18:36:14]
>>622
>>620は「相変わらず」と言ってるので「つーか」になってないよー


625 名前:デフォルトの名無しさん [04/12/18 01:53:39]
これがプロトタイプベースだぜ。クラス厨共、どうだよこのクールさは、ああん?




みたいなコードキボン。



626 名前:デフォルトの名無しさん mailto:sage [04/12/18 03:08:12]
>>625
言語システムのローレベルをくみ上げていく(っと言うかブートストラップと言うか)の段階が一番興味深い結果出すと思うが。


627 名前:デフォルトの名無しさん [04/12/18 03:17:45]
>>626
どんな感じ?イメージ沸かぬ。

628 名前:デフォルトの名無しさん mailto:sage [04/12/18 03:23:45]
>>627
クラス型の言語だとObjectがすべての原型->そのObjectのClassのメタクラスの->Object
みたいな循環部分を最初にどうやってくみ上げるかってお話があるじゃないですか。
プロトタイプ型言語だと自分を派生させる機構は最初何から始めるのだろうって当たりが面白いんじゃないのって事なんで
あんまり深く考えてたわけじゃないです。

小生4年くらい前にpureオブジェクト指向言語をclassベースでやったときにその基底部分のくみ上げが非常に面白かったんで
同じようにプロトタイプ型言語でも興味深い(言語の性格に依存した)立ち上げ方法があるんでないのかって事です。



629 名前:デフォルトの名無しさん mailto:sage [04/12/18 06:53:50]
俺も幼稚園ぐらい前に関数型言語をクロージャべースでやってたなあ

630 名前:デフォルトの名無しさん mailto:sage [04/12/18 09:03:34]
ごめん、俺も小学4年生くらい前に、って読んだw

631 名前:デフォルトの名無しさん mailto:sage [04/12/18 11:45:03]
Objectクラスに相当するモノは、
プロトタイプではいかにあるべきか考えるのが面白いって事?


632 名前:デフォルトの名無しさん mailto:sage [04/12/18 19:24:45]
>>628
俺は、ある言語が扱う範囲を1つの世界と見立てると、基幹の定義はその世界の外に作っちまうな
あたかも“初めから存在してました。深くは考えないでください”って感じに

633 名前:デフォルトの名無しさん mailto:sage [04/12/18 19:42:19]
どうやっても遅い

誰も使いたがらない

死滅


このプロセスで大筋間違いないよね

634 名前:デフォルトの名無しさん mailto:sage [04/12/18 20:10:22]
>>633
ははは君の理論で行くと全ての言語が一度に滅ぶでないかw
完全にカスタマイズできるマシン語が最強なのだよ、ってな感じにね

あふぉかと

635 名前:Aransk [04/12/19 16:53:31]
1.敢えて遅くしてまで言語に不自由さを生み出している。
2.不自由だから誰が使っても大差ない。
3.誰でも使い出す。
ってのはどうなんでしょう?
デザインパターンにしても一握りのチョンの
後をポチが追いかけるスタイルですよね。
自由にすると大多数のポチは何をしたら良いのか
さえ分からないから、言語は自由度を制限せざる得ない。
ただ問題はワタクシのように単なるポチの
くせにチョンを真似て自由な言語を好むタイプが
存在するから話がややこしくなる。
(我流で無茶苦茶書くから…書いても一応動くから…
本人でもメンテ出来ないコードを誰がメンテできるのか…)
これが大規模開発にチョン言語が使えない理由では
ないでしょうか?





636 名前:デフォルトの名無しさん mailto:sage [04/12/19 19:58:02]
>>635
他人の指向にどうこう言う筋合いは無いし、事実御前の考えも一理あるが、
少なくともデザパタに関しては認識そのものが間違ってる
よく勉強しなおす事

637 名前:Aransk [04/12/20 10:17:58]
>>636
デザインパターンを示されても理解が困難な
ポチにパターン自体を創造出来るかどうか?
これを問題にしておるのであります。
チョンが道筋をつけその後、ポチの程度に
よって追いかけかたが変わります。
新たなデザパタを作れるポチも居れば
利用するだけのただ乗りポチも居る。
一生オブジェクト指向に縁無きポチも存在する。
但し理解して利用しないのと、理解出来ずに
利用できないのとでは雲泥の差がある。
理解して利用しないのは十分チョンの
見識有りと考えます。チョンを超えている
可能性も否定できません。



638 名前:デフォルトの名無しさん [04/12/21 02:16:30]
>>616
>やっぱどこでも使えるJavaScriptがいいよ
JavaScriptってもうプロトタイプベースじゃないんじゃない?


639 名前:デフォルトの名無しさん mailto:sage [04/12/21 10:34:43]
クラスが付いたから? w

ちなみに「クラスがない」ってよく言われるけどありゃ嘘で、
本当は「クラスを言語が用意する必要がない」(つまり、
他の基本的言語機能で必要なら実現可能)ってだけの話です。

実際、SELF にも NewtonScript にもクラス(SELF では
トレイトと呼ばれているけど)はあって、言語仕様では
重要な役割を演じています。

640 名前:デフォルトの名無しさん mailto:sage [04/12/21 10:47:25]
REBOL(www.rebol.com/)
変数のスコープと評価順序に癖のある言語ですが、プロトタイプベースらしいので。

REBOL []
Dog: make object! [

bark: does [print "WAN! WAN!"]

eat: does [print "GATU GATU"]
]
Dog/eat
Dog/bark

Cat: make Dog []
Cat/eat
Cat/bark

Cat/bark: does [print "NIAO NIAO"]
Cat/bark
Dog/bark

Dog/eat: does [print "PAKU PAKU"] ; 親スロットを変更してみる
Cat/eat
Dog/eat

641 名前:デフォルトの名無しさん mailto:sage [04/12/21 10:47:41]
プロトタイプベース(この呼び名は語弊があるから避けるべきで、
インスタンスベースとか、オブジェクトベースのほうが良い
と思います)の要件は「インスタンスがメソッド(メンバ関数)
や属性を *クラスに依存せずに* 持てること」に尽きるでしょう。

642 名前:デフォルトの名無しさん mailto:sage [04/12/21 10:49:12]
>>640の実行結果
GATU GATU
WAN! WAN!
GATU GATU
WAN! WAN!
NIAO NIAO
WAN! WAN!
GATU GATU
PAKU PAKU

: は代入宣言, / メンバの参照。
does は、引数なし関数を生成する関数。makeは、newとかclone相当。

>>590
REBOLでは影響なし。Prothonでは影響がありました。

643 名前:Aransk [04/12/21 18:19:04]
>>641
>プロトタイプベース・オブジェクト指向とは
>sumim.no-ip.com:8080/wiki/493
によれば
>「インスタンスがメソッド(メンバ関数)
>や属性を *クラスに依存せずに* 持てること」
ではなく、問題は本来持てないはずが持ててしまう
ことにあるのではないでしょうか?
インスタンスは持てちゃ駄目なんです。
退歩を進歩と錯覚しているに過ぎない。
Rubyに特異メソッドを持てなく
することや、カプセル化を厳しくしろ
って言うほうが逆に大変なんじゃなか
ろうか。
ルーズ化するほうがイージーだってこと
もある。



644 名前:デフォルトの名無しさん mailto:sage [04/12/21 18:32:15]
>>643
つまり
・ ECMAScript や JavaScript は問題だから使うべきではない。
・ DHTML で使う際にも、<input onClick="hoge()"> なんて書けちゃダメで、ちゃんとクラス化して
 class HogeButton { onClick() { hoge();} }; <input class="HogeButton"> 等と記述できなくてはおかしい
ということですね。

同意しておきます(w

645 名前:デフォルトの名無しさん mailto:sage [04/12/21 18:34:17]
Rubyから特異メソッドをなくすにはコードを削りはするが追加する必要はないとだけいっとく。




646 名前:デフォルトの名無しさん mailto:sage [04/12/21 19:41:07]
>>643
>>「インスタンスがメソッド(メンバ関数)
>>や属性を *クラスに依存せずに* 持てること」
>ではなく、問題は本来持てないはずが持ててしまう
>ことにあるのではないでしょうか?
>インスタンスは持てちゃ駄目なんです。

関数/メソッド自身もオブジェクトな言語では、
関数を変数やフィールドにいれたりする事は自然な事なのですが。

647 名前:デフォルトの名無しさん mailto:sage [04/12/21 22:24:36]
クラスを「ユーザー定義可能な型」として代用する“クラス指向”オブジェクト指向
においてはインスタンスはクラス(すなわち、それが属する型)の支配下にあって
しかるべきだし、各々が独自の関数(インターフェイス)を持つなどということは言う
までもなく、クラスをしても動作中に仕様を換えるなどということはあってはならない
こと。したがって、インスタンスベース(と、それにより実現されるメリット)なんて、
とんでもない…ということになる。

ところが、ケイの“メッセージ指向”オブジェクト指向の世界では、考え方がかな
り違う。オブジェクトはソフトウエアを構成する一部ではあるが、それ単独では
非力で意味のない部品であってはならない。それぞれが独立して機能する
小さなコンピュータであるべきだと彼は言う。*1 これらが高速のネットワーク
で接続され、ソフトウエアは機能する。彼の設計したSmalltalkでは(残念ながら
クラスベースで、インスタンスはその支配下にあるが、それでも)クラスもまた
オブジェクト、つまり、別のクラス(メタクラス)のインスタンスであることや、動作
を止めずにクラス定義の変更を通じてオブジェクトの振る舞いを変えられること
などに彼のオブジェクト指向が目指していたところの片鱗を見ることができる。*2
もちろんこれは、前者の立場の者、有名なところではメイヤー、の目には、
いたずらに混乱を招くだけの、無用の(あるいは代替可能な)仕様にしか見えない。*3

このように、オブジェクトが自らの振る舞いをクラスに依存せずに決められることについて
の評価は、よりどころとするオブジェクト指向が、クラス指向なのか、メッセージ指向なの
かによって違ってくる。インスタンスが“本来”どうあるべきか、もしかり。

*1 www.akademia.co.jp/Smalltalk/SML/archives/SRA.archives/2003-October/006339.html
*2 ただし、ケイはインスタンスベースに対する態度を保留している。
*3 「オブジェクト指向入門」 ISBN: 4-7561-0050-3

648 名前:デフォルトの名無しさん mailto:sage [04/12/21 23:11:02]
>>647
> *2 ただし、ケイはインスタンスベースに対する態度を保留している。

LISP的でカオティックすぎると批判していなかったか?

649 名前:デフォルトの名無しさん mailto:sage [04/12/21 23:35:56]
>>648
よければ出典を。 まあ、いかにもらしくて言いそうなことだけれど。w
念のため、保留との解釈の根拠はこちら。

www.google.co.jp/search?q=cache:WbjukQKKfwAJ:glab.cs.uni-magdeburg.de/
~croquet/downloads/Croquet0.1.pdf

650 名前:デフォルトの名無しさん mailto:sage [04/12/21 23:44:54]
Smalltalk流にパーシスタント・オブジェクトの集合してシステムが出来上がってるものの場合、
クラス(←これもまた何かのインスタンス)を動的に変更できない方が不自然な感じがする。
Lispで何でも再定義できるのも同様。

システム全体がとてもステートフルなものになってしまうという問題は確かに大きいのだけれど、
dll hell等でどうせシステムはとてもカオティっクでステートフルになるんだから別にいいか。

いや、そんなことないか。如何様にも変更可能なクラス(インスタンス)はいいとして、何か不動の
インタフェイス的なものが無いとやっぱり辛いな・・・

651 名前:デフォルトの名無しさん [04/12/22 02:11:15]
staticなモデル化が容易で型チェックでその整合性が保証される
Javaとかの「普通」のクラスベースOO言語に対して、プロトタイプベースってどの辺にメリットがあるのかな。
便利な場合もあるだろうけど、ただ便利じゃなくてせめてそれがクールに感じられるコーディングにならないと
言語としてメリットとは言い難い気がする。



652 名前:デフォルトの名無しさん mailto:sage [04/12/22 02:19:44]
>>651
委譲を使うコードがむちゃくちゃシンプルになる。

ttp://homepage.mac.com/mkino2/oop/chainOfResp/

653 名前:デフォルトの名無しさん mailto:sage [04/12/22 04:15:44]
>>650
> Smalltalk流にパーシスタント・オブジェクトの集合してシステムが出来上がってるものの場合、
> クラス(←これもまた何かのインスタンス)を動的に変更できない方が不自然な感じがする。

それで実際、クラスどころかオブジェクトのサイズから属性やメソッドまで動的に
変更できるわけです。

654 名前:デフォルトの名無しさん mailto:sage [04/12/22 05:59:54]
プロトタイプベース言語のミニマルセットの定義ってどこかに無いですか?
できれば書籍が一番うれしいのですが。

googleじゃ引っかからなかった(英語圏は試してない)


655 名前:デフォルトの名無しさん mailto:sage [04/12/22 11:28:30]
>>654
ミニマルではないけれど、インスタンスベースを語る前に、少なくとも
これだけには目を通しておくべきかと思います。

ttp://www.ice.nuie.nagoya-u.ac.jp/~h003149b/lang/p/self/self.html


インスタンスベースの考察については、英語でちょっと高い本ですが

A Theory of Objects (ISBN: 0387947752)
ttp://www.amazon.com/exec/obidos/tg/detail/-/0387947752

がそれなりにページを割いていて、比較的詳しいです。これを読むと
クラスベースとプロトタイプベースに本質的な違いはなにもないことも
分かります。



656 名前:デフォルトの名無しさん mailto:sage [04/12/22 12:49:57]
SELF に関しては、メッセージ送信重視の立場と、インスタンスベースの
立場を分けて評価する必要があります。たとえば、インスタンス変数を
持たず、スロットを振る舞いと属性で共有することについては、名前の
衝突の問題が生じることがすでに分かっています。(つまり、スロット
アクセスを多態させるときに getXXX などと別名を設けないといけない)
こうした問題はメッセージ送信重視の立場から来るもので、インスタンス
ベースであることとは関係ありません。

SELF はメッセージ指向寄りの(しかしメッセージ指向とは違う、単に
メッセージ送信重視の)立場から、Smalltalk の実装に対して生じた
疑問、あるいは想定しうる理想像を具現化して見せたものとみることが
できます。その結果生じたもののひとつがインスタンスベースだと
考えておくのが無難です。つまり、インスタンスベースの特徴は SELF
に見ることができますが、SELF の特徴すべてがインスタンスベースに
当てはまるわけではないということです。

インスタンスベースの他に、SELF の副産物としては、コスト高で最適化
が難しいメッセージ送信の行きすぎた(笑)徹底により、VM の高速化技術
が生まれたことが挙げられます。これは Strongtalk という静的型チェック
機構を持つ Smalltalk の派生物を経て、現在、Java VM に役立てられて
います。

657 名前:デフォルトの名無しさん mailto:sage [04/12/22 14:06:15]
>>656
> getXXX などと別名を設けないといけない

スミマセン。これ嘘です。getter ではなく setter のしかも、SELF では
なく Io の言語仕様上の問題を思い違いしておりました。忘れてください。

658 名前:Aransk [04/12/22 19:01:04]
例えばこんなパースペクティブもありかなと
考えていること:
言語論的に申し上げればフィンランド語は動詞の変化
だけでも30型あります。ヨーロッパ系言語のなかでは
最も複雑な文法体系を有しております。
ご承知の通りフィンランドの教育水準の高さは世界の
他の国を圧倒しております。つまり使いこなせれば
言語は精緻であればあるほど頭脳を進化させます。
コミュニケーションの幅が広がる次第です。
西サモア諸島の言語は現在形しかありません。
プログラミング言語と同じです。
従ってプログラマーの頭脳水準は…。
なんてことを言いたい訳ではありません。
つまり精密なルールは文明の進化に負っております。

で、話をインスタンスにメソッドやフィールドを
持たせることに戻ります。
クラス概念の精緻化というパースペクティブから解釈
するとそれは単にルールを破っていることに過ぎない。
また、LispやSchemeの言語文法自体を変化させる
マクロは言語自体を破壊することになる。
これは不自由で精緻なルールがあるから
人間の頭脳は進化するというパースペクティブから
の意見です。


659 名前:デフォルトの名無しさん mailto:sage [04/12/22 19:32:17]
>>656
Programming as an Experience: The Inspiration for Self
にも出てくるけれど、
「スロットで振る舞いと属性を共有する」
つまり
「スロットの中身が値ならそれを返して、
メソッドオブジェクトならそれを実行する」
というやりかただと、
メソッドオブジェクトを値としてほしい場合に困るっていう問題があります。
これに対してSelfではmirrorオブジェクトというのを使うみたいです。


660 名前:デフォルトの名無しさん mailto:sage [04/12/22 22:24:18]
>>655
おお。SELFってこういう物だったんだ。参考になるなあ。

661 名前:デフォルトの名無しさん [04/12/23 03:08:03]
>>652
CoRなんてごくたまに使う程度のモンじゃない?
LispのLambda式みたいに、CoRベースの世界が構築できるなら別だけど、
クラスベースOO言語とくに静的型付の普通の言語のメリットには遠く及ばないよね。


662 名前:デフォルトの名無しさん mailto:sage [04/12/23 04:21:44]
つまり和訳すると、委譲がすっげーシンプルに書けるのを見て
ちょっとびっくりしちゃったわけね…。

663 名前:デフォルトの名無しさん mailto:sage [04/12/23 12:29:21]
クラスベースでならメタ・プログラミングが必要な場面で、
現状のクラス・ベースでは、そういった場面をデザインパターンや
クラス・システムの拡張で対応しているが、(そのシステム数だけ、それを特徴とした新たな言語を生み出している)

プロトタイプでは一般的な概念の枠内で拡張し対応できる。
例として、AOP拡張とかプロトタイプ・ベースの言語で提示してみるのはどうでしょう?

例えばJAVAがソース or バイトコード変換といった手段で実現している事を、
プロトタイプ・ベースでどれだけ簡単に出来るかというのを比較してみると面白いかもしれません。


664 名前:デフォルトの名無しさん mailto:sage [04/12/23 12:37:48]
>>663
classがfirst class objectであるかどうかの問題とゴッチャになってないかい?

665 名前:デフォルトの名無しさん mailto:sage [04/12/23 12:47:50]
漏れはそういったハードコアな分野ではクラスベースとの差異はあまり無いと思ってる。憶測だけど。
とはいえAOP関連だと、特定のインスタンスのみにコード挿入するとか、クラスベースでは出来ない
ものも簡単にできるのも確か。

でも、さんざ既出のDHTMLのようなものが簡単に書けるというのがプロトタイプ言語の特徴だと思う。
クラスを沢山作らなくても、複数のimgタグでonClickの動作を変えられるし。.NetのSystem.Windows.
Forms以下の各種コントロールにイベントハンドラを記述するというアーキテクチャなんかも、これは
prototype言語の守備範囲なんじゃないか?とか思うし。



666 名前:Aransk [04/12/23 15:45:54]
C < Pascal
>C++ < Java
>CommonLisp < Scheme
>Smalltalk < Self
>と思うわけですよ.この気持わかるでしょ?
その気持ちはすっごく分かる。
幼稚園時代だけど。W

不思議と実用性は前者が高いんですよね?
C++とJavaのケースを除き…というか
本来の意味の実用性で言えば個人的には
C++とは思いますが。
理由として考えられるのは
アカデミックな理論整合性より現実の
ソリューションは複雑であるということが
一つ。
もう一つはプログラマーの専門性の問題です。
誰でもとっつき易いものでは食えない
が、しかし、あまりに少数しか分からないもの
でも職業として成立しない。
このパースペクティブから、プロトタイプ言語の
自由度は協業度の面でマイナスとして
作用しないのでしょうか。
つまり作った奴しか分からないというか
作った本人もどのインスタンスに細工したのか
忘れてしまうとか。


667 名前:デフォルトの名無しさん [04/12/23 23:31:59]
>>664
ごっちゃ通貨、それは包含関係にあるのでは?
何か問題が?

668 名前:デフォルトの名無しさん mailto:sage [04/12/24 01:54:13]
>>667
クラスをfirst class objectとしているクラスベース言語が多数ある以上、
>>663は完全にトンチンカンなわけだが。

669 名前:663 mailto:sage [04/12/24 08:40:35]
AOPって例がまずかったかな?

first class objectって時点で、
多くのプロトタイプ(インスタンス)ベースの実装と本質的には同じものになるだろうけど。
クラスやオブジェクトの拡張がクラス・ベースの概念の枠内でどのように扱われているかという点において、

クラス・ベースの言語ではメタ・プログラミングが必要な場面で、
プロトタイプ(インスタンス)・ベースでは自然に備わっている特徴で解決出来る。といった主張でした。

670 名前:Aransk [04/12/24 10:41:39]
常に物事は批判的に検証するなかでしか
重みや深みは付加されません。
敢えてプロトタイプベースの命綱でなる
オブジェクトに対するメッセージパスについて
伺いたい。
本質的な機能として引数を指定して関数を
呼び出すこととの差異はなんでしょうか?
つまり敢えて擬人化した名前を付することに
よる効果の方が実質を上回っていないの
でしょうか。


671 名前:デフォルトの名無しさん mailto:sage [04/12/24 13:16:06]
>>669
>クラス・ベースの言語ではメタ・プログラミングが必要な場面で、
>プロトタイプ(インスタンス)・ベースでは自然に備わっている特徴で解決出来る。といった主張でした。

例示してください。

672 名前:Aransk [04/12/24 18:07:28]
>sumim.no-ip.com:8080/wiki/493
リンクを外しておられませんでしょうか?


673 名前:1 mailto:sage [04/12/25 21:11:44]
>>Aransk

>インスタンスは持てちゃ駄目なんです。
なんで?
駄目な理由を述べよ。

>誰でもとっつき易いものでは食えない
これ、クラスベースに対するプロトタイプベースのルールの少なさに対して言ってるんだよね。
バッドノウハウでしか食ってけないプログラマなんていらないよ。

このスレもいつの間にか1年経ちましたねぇ。


674 名前:Aransk [04/12/26 17:30:24]
1.ご承知の通りクラスとインスタンス概念の導入は
型生成と実動プログラムを分離したところにある訳です。
従ってインスタンスが自ら変形して新たなインスタンスを
生成することは、鯛焼きの鯛が金型無しで鯛焼きを作るような
倒錯した状況を生み出すことになるのです。
2.従ってプロトタイプベース言語は愛玩用のToyProgramを
作成することにその長所を発揮すべきではないでしょうか。
成熟社会はますます個人の自由な暇潰しを求めます。
そのニーズにぴったり合致した言語ではないでしょうか。
と、まぁ敢えて批判的に申せばこうなります。

ところで1っつぁん、>>670に対する
貴方ご回答を期待しておるのですが?



675 名前:デフォルトの名無しさん mailto:sage [04/12/26 18:35:31]
>>674
クラスベースはオブジェクト指向の誕生と同時に誕生したと思っていたが

考え方が根本的に違う

プロトタイプベースの利点は、既存のオブジェクトを(ある程度まで)自由に弄れる事
例えば、HTML で記述された既に画面上に存在するボタンなどに追加の挙動を割り当てられる等
クラスベースだと、予め全てのボタンを定義しておかなければいけないという制約が付く

オブジェクトを変更させない方に特化するか、変更させる事に特化させるか
どちらも同様にニーズがあることは自明で、どちらが優れているかは議論すべきじゃない

と俺は思う


……というか、クラスベースとプロトタイプベースのどちらが優れているかなんて
日本語と英語のどちらが優れているかを議論するようなもんだろ?



676 名前:デフォルトの名無しさん mailto:sage [04/12/26 18:36:00]
>>674
というか、>>670 の『擬人化』の意味が良くわからんとですが

677 名前:デフォルトの名無しさん mailto:sage [04/12/26 18:54:22]
>>675
日本語の方が優れています。
これは全世界で一致している見解です。


と言ったら?






[ 続きを読む ] / [ 携帯版 ]

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

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