[表示 : 全て 最新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


552 名前:デフォルトの名無しさん mailto:sage [04/04/15 00:45]
>>551 OCamlは?

553 名前:デフォルトの名無しさん mailto:sage [04/04/15 00:53]
>>552
dynamic binding な言語が好きなもので。すいません。

554 名前:551 mailto:sage [04/04/19 04:21]
Slate ハケーン!

slate.tunes.org/

以前このメールを見た時は、サイトに繋がらなかったのに。

ttp://www.sra.co.jp/smalltalk/SML/archives/2002-October/005955.html

555 名前:デフォルトの名無しさん mailto:sage [04/04/19 12:27]

C++ の operator() および、 boost::function などの汎用関数オブジェクトは、
型にとらわれない柔軟な仕組みだと思う。C++ は静的でありながら、工夫次第で
動的拡張も可能なモンスター言語だとおもう。

myObject.Connect( "Proc", MyFunction ); // MyFunction を スロットにセット
( myObject->*"Proc" )( 24 ); // MyFunction 呼び出し

とかも出来る。しないけど。

556 名前:デフォルトの名無しさん mailto:sage [04/04/19 18:54]
言語は色々勉強した方がいいよ。


557 名前:デフォルトの名無しさん mailto:sage [04/04/19 19:15]
Delphiのカスタムバリアント(ボソ

558 名前:デフォルトの名無しさん mailto:sage [04/05/05 10:41]
Self 4.2.1 がリリースされていますね。

ttp://research.sun.com/self/release_4.2/release.html

559 名前:1 mailto:sage [04/05/21 21:31]
hosyu

560 名前:デフォルトの名無しさん [04/06/02 18:37]
どうした?
おまえら。



561 名前:デフォルトの名無しさん mailto:sage [04/06/05 00:19]
selfってWindowsかLinuxじゃ使えないの?

562 名前:デフォルトの名無しさん mailto:sage [04/06/05 22:20]
>>561
一応、あるにはあるのですが…。古いので動かすのは難かしいかも。

ttp://www.gliebe.de/self/

563 名前:デフォルトの名無しさん mailto:sage [04/06/09 18:22]
今使うならJavaScript一択でしょ。

564 名前:デフォルトの名無しさん [04/07/03 01:38]
プロトタイプベース晒しage

565 名前:デフォルトの名無しさん mailto:sage [04/07/05 03:52]
>>563
一応IoやSmalltalk(Squeak)でもいいんじゃない?

566 名前:デフォルトの名無しさん mailto:sage [04/07/06 14:58]
あれ、だれもProthonに触れないの?
海外で結構人気らしい。
www.prothon.org/index.html

567 名前:デフォルトの名無しさん mailto:sage [04/07/15 11:51]
>>565
こら! Smalltalkはクラスベースだろ。それをプロトタイプベース
に改造した「始祖」がSelfだ。

568 名前:デフォルトの名無しさん mailto:sage [04/07/15 12:23]
アホが一匹紛れ込んでいるので引き取ってください
C#って死滅する理由がないよね! Part4
pc5.2ch.net/test/read.cgi/tech/1042464104/639


569 名前:デフォルトの名無しさん mailto:sage [04/07/15 20:31]
>>567
タイルスクリプティング(だっけ?)の部分じゃないの。

570 名前:デフォルトの名無しさん mailto:sage [04/07/16 08:05]
>>569
それはSmalltalkじゃなくてSqueakな…
いってみれば「Cは統合ヘルプ環境がいい」と同じぐらい変。



571 名前:デフォルトの名無しさん mailto:sage [04/07/16 10:47]
>>570
>>565 に Squeak って書いてあるじゃん。

572 名前:デフォルトの名無しさん mailto:sage [04/07/16 11:54]
うち誰かがSqueakシステムにおける、Squeak eToysとSmalltalk言語の区別が
できていない罠。

eToysはSmalltalk言語で記述されているが、Smalltalk言語とは別物の
言語処理系。プロトタイプベースだし、変数には型があり、if-then-elseの
条件分岐構文もある。

ふつう、Squeakと書けば(Smalltalkが併記された場合はなおさら)「Squeakシステム」を、
Smalltalkと書けば「Smalltalk言語」をイメージさせるから「Smalltalk(Squeak)」と
書いてもSqueak eToysを意図しているとは受け取られにくい…

のであります。

573 名前:デフォルトの名無しさん mailto:sage [04/07/16 12:06]
俺はむしろ、わざわざ Squeak と併記したのは、Morph とかタイルスクリプティングを
匂わせたかったのかと思ったよ。まぁ、好意的な解釈かもしれんが。

574 名前:デフォルトの名無しさん mailto:sage [04/07/16 13:50]
>>573
むしろ? わざわざ?

575 名前:デフォルトの名無しさん mailto:sage [04/07/17 01:28]
子供かよ。

576 名前:デフォルトの名無しさん [04/07/19 14:47]
Hage

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/






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

前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