«前の日記(2006-01-26) 最新 次の日記(2006-01-28)» 編集

Matzにっき


2006-01-27 [長年日記]

_ [言語] 「Javaの生みの親」に聞く「AJAX、LAMP、Ruby on Rails」

Goslingへのインタビュー。彼までRubyに言及してくれるとは。 これもRailsのおかげだろう。ありがたや。シカゴのほうに足を向けて寝られない。 だんだん足を向けられない方向が増えてくな。

しかし、RailをJRubyとつなげて答えるなどとんちんかんな印象を与える答えも多い。 また、ちょっとスクリプト言語を見下していたり、 「言語のパワー」を低く見ているような印象も受ける。

ところで、彼の

ただ1つ、スクリプト言語の作成者には、もっと変わったものを作ってほしいという願いを抱いています。

というメッセージを自分のものとして聞ける立場の人間はさほど多くないと思うのだが、 さいわいにも私はその一人だ。

正直、「あまり変わったものを作らない(少しだけ変わったものを作る)」ことこそが 言語の成功の秘訣だと考えているので、 「もっと変わったもの」についてはあまり積極的ではないのだが、 少し考えてみよう。

「変わったもの」...うーん、APLのリストとか。 RubyのArrayにアレを実現できる機能を用意すれば...。

うむ、一次元のものについては今でもinjectとか使えばでできちゃうのかな。

_ [OOP] 「オブジェクト指向」改め「抽象データ指向」

20日分のエントリは結構話題になったようで ありがたいことである。小飼さんのところでも 「オブジェクト指向は構造化の「次」か?」というテーマで反応していただいている。

彼は構造化とOOPは「直交する」と認識していらっしゃるようだ。

ま、理屈ではOOPだが構造化されてないプログラムは存在しえるので、 直交していると言えないことはないと思う。 が、それを言い出すと構造化プログラミングを構成する各要素も直交してるし。

要するに同じカテゴリに属する同じ性質のもので、 オブジェクト指向(プログラミング)の方が後から出てきた、程度の意味なんだけど。

まあ、それはある意味どうでも良いことなんだが、 小飼さんの文章を読んでいて、少し気がついたことがある。

実際smalltalkやhypertalk、そしてsqueakといったプログラミング環境では、オブジェクトはフィールドとかボタンとかといった、「もろに目に見える」「実存」であり、それ故まだものごとを抽象化して捉えることの出来ない子供でも始められるようになっている。

Smalltalk環境やHypercardにおいて、「オブジェクトを操作できる感」が提供されていることは 事実だが、それは「オブジェクト指向プログラミング」とは直接関係ない。 それはある意味「アプリケーションの機能」であって、 オブジェクト指向プログラミングによらないアプリケーションでも ユーザに「オブジェクト感」を提供できるだろう。

オブジェクト指向プログラミングを使った方が そのようなアプリケーションを作りやすいだろうけど、逆に言えばそれ以上ではない。

で、私よりも数学的思考法に強そうな小飼さんまで、 そのような「混同」をしてしまうというのは、 単にマーケティング用語として「オブジェクト指向」が使われた不幸だけでなく、 「オブジェクト」という単語が持つ「魔力」というのものは 私の想像以上に強いということなのかもしれない。

オブジェクト指向プログラミングにおけるオブジェクトという抽象化された存在と 目に見える(あるいは触れる)モノとの連結性を強く連想してしまうのが (普通の)人間というものか。

私にとってのオブジェクトは、現実に対応するものがあるにしても 抽象化された存在であるから、現実とどこまで対応しているかなんて 気にしたこともないのだけれども。 そんなの「三匹の猫」と「数字の3」が同じ性質を共有してないと 文句を言うのと同じくらい不毛な気がする。

あるいは、私がそう感じるのは、私が日常的に扱う「オブジェクト」は、 「文字列」とか「配列」とか「コンティニュエーション」とか 現実世界に対応するものが存在しないものばかりだからかもしれない。

本日のツッコミ(全18件) [ツッコミを入れる]
_ ゆん (2006-01-29 03:09)

OOPの解説書で「オブジェクトとは物です」と言って、いkなり「AnimalとDogとCat」の話を始めちゃう人は、実はあんまりOOPで大きいプログラムを書いた経験が無かったりするんじゃないかなあと思ったり。OOPの真髄っていかに「現実の物体とは対応しない抽象概念」をモデリングするかにあると個人的には思います。

_ まつもと (2006-01-29 03:56)

私もやらかしたことがあります。「AnimalとDogとCat」。<br>つい出来心でした。今は反省しています。

_ IKeJI (2006-01-29 12:49)

>「あまり変わったものを作らない(少しだけ変わったものを作る)」ことこそが言語の成功の秘訣<br>現存の言語が変わった物だけだから、それを変わっていない物になおす。のでは?

_ hyuki (2006-01-29 18:01)

日本語圏の人が「オブジェクト指向」という用語を聞いたときの感覚と、英語圏の人が「Object Oriented」という用語を聞いたときの感覚は同じなのでしょうかね。英語圏でもやはりObject Orientedがhypeと思われたり、魔力を与えたりするものでしょうかねえ…。

_ まつもと (2006-01-29 18:23)

既存の言語が変わったものばかりだとすると、それらに比べてRubyが「変わっていない」ところはあんまりないような。> Ikejiさん

_ びすけっと (2006-01-29 20:05)

抽象データ型と一般的な抽象化とは違うものです.<br>抽象データ型はデータの実装を抽象化するというもので,<br>もちろん抽象化の一部ですけど,それ以外の抽象化を含んで<br>いません.命令列の抽象化だとサブルーチンだし,<br>型だと構造体など,データ抽象の以前から仕組みは<br>ありますよね.<br><br>オブジェクト指向は「データ抽象」「多層」「継承」<br>という3つの技術を「モノ」というメタファに<br>からめて,言語として具現化したというものです.<br>技術が3つに分かれるので,3つのうちどれか2つ<br>だけを実現する言語というのも存在します.

_ まつもと (2006-01-29 23:59)

びすけっとさん、おっしゃること(の本質)を否定はしませんし、おっしゃることに極端に反したことは書いてないと思います。ですよね。<br><br>ただ、「オブジェクト指向は「データ抽象」「多層」「継承」という3つの技術を...具現化した」ものであるかどうかについてはやや異論を持っています。3つの技術をすべて備えていない「オブジェクト指向」を実際に知っているからです。<br>まあ、表現だけの問題だと思いますが。びすけっとさんも「3つのうちどれか2つ<br>だけを実現する言語」は3つ全部実現していないからオブジェクト指向ではないと考えているわけではないでしょう?

_ とも (2006-01-30 00:41)

極論ですが、データ抽象も、多層も、継承もなくても、<br>オブジェクトとメッセージ・パッシングがあって、<br>オブジェクト計算してたらオブジェクト指向言語かなと<br>思うんですがだめかな?

_ 通りすがり (2006-01-30 02:23)

オブジェクト指向とObject Orientedはだいぶ違うと思いますよ。>hyukiさん<br><br>Object Orientedには「目的語を中心に」というニュアンスがあるはず。日本語で「モノ指向」という翻訳をすると大体materialな感じが漂うと思います。Object=客体とか、この辺りが正確な訳語ではないかと。

_ ながお (2006-01-30 03:13)

http://www.saiensu.co.jp/books-htm/ISBN4-7819-0276-6.htm<br>によると「オブジェクト指向」は構造化プログラミングの一例<br>ということになりそうな。<br>「階層的プログラム構造」でクラスを使ったプログラミングを<br>扱っています。

_ まつもと (2006-01-30 08:11)

いいんじゃないでしょうか。> ともさん<br>「データ抽象」じゃない「オブジェクト」ってのはどんなものだかわかりませんが。

_ まつもと (2006-01-30 08:16)

英語圏でobject-orientedに「目的語を中心に」というニュアンスがあるとは初耳です。>通りすがりさん<br><br>最近は(ウォッチしてないので)あまり知りませんが、少なくとも過去には国内に負けないほどのオブジェクト論争があったはずです。その中に「目的語中心」というコンセンサスは無かったと思いますし、たとえばKayがobjectと言う単語を使ったときに、目的語という意味を念頭においていたという話も聞いたことはありません。情報源は何ですか?<br><br>Kayについてはおおしまさんとかに頼んだら直接聞いてもらえるかもしれません。

_ 通りすがり (2006-01-30 12:29)

あーと、情報源というか、英語だとobjective=客観、外界的、目的格というのが言葉そのものに含まれてるけど、日本語だと違うよね、という話なので。Kayが念頭に置いたとは思いません。意識もしてないと思います。<br><br>ただfunc(data)のSmalltalk流であるreciver msg.という語順は少なくともsubjective的ではないでしょう。私はこの感じを日本語の「オブジェクト指向」が正確に表現できているとは思えないので。

_ まつもと (2006-01-30 14:48)

??<br><br>「receiver mesg」をむりやり英語の文法にあてはめれば、オブジェクトたるreceiverは、主語すなわちsubjectになるんじゃないんでしょうか。そういう話をするならば「func(data)」の方が「objective」な気が。なんか誤解してる?

_ 通りすがり (2006-01-30 15:48)

分かりづらくてすいません。<br><br>Smalltalkに限定していえば、Kay的世界観では<br>「Computer is real」<br>「Computer verb something」<br>であり、主格はコンピュータにある筈なんですよ。環境主義やメッセージを重視するのも「Communication between human & computer」だからで、それを「今まではverbを軸に考えてたけど、Objectiveを軸をした方が良くない?」と。アクターまで行けばオブジェクトが主格なのかもしれませんが、本来は常に主格を要求する西欧言語の特性とコンピュータが常にそこにあるという物のミックスが(少なくともSmalltalkの)オブジェクト指向であると考えます。<br><br>以下は余談&主観なのですが、逆にRubyからはヤオヨロズ的というか、「言語は言語なんだから主格無しでいいじゃん」というのを感じる時があります。以外とこれは「オブジェクト指向 != Object Oriented」のような。

_ よしき (2006-01-30 16:32)

通りすがりさんのおっしゃっていることは、僕も良く判りません。<br><br>Smalltalkの「オブジェクト手づかみ感」を僕が感じるのは、別に画面上に表示されるGUIオブジェクトの話に限らず、抽象的なオブジェクトであっても、そのインスペクタを出して中に手を突っ込んで値を変えたり、そのオブジェクトのコードをブラウザで直して振る舞いを変えたり、ということを対話的にどんどんできる、というところなので、やっぱり目に見えることを持ってオブジェクト指向というのは変だと思います。インスペクタが可視化ツールなのだ、という言い方もできるのかもしれませんが...

_ 通りすがり (2006-01-31 00:47)

ちょっとズレてるかもしれません。<br><br>「オブジェクトが目に見えることがオブジェクト指向」とはいってませんです。verb主義の古典的言語(FORTRAN,ALGOL,<br>etc)の場合は数学メタファーとか真理メタファーであって「何者がそれをなすのか」という視点が欠如しているので、故に環境、インスペクタ等々の手づかみ感を保証する形ある、目に見える神みたいなものがない、というのでよしきさんへの解答にはなるでしょうか?<br><br>で、Smalltalkの場合そもそもそれが「receiver」である時点で全てのメッセージ送信は本質的に受動態なわけです。つまりSmalltalk verbs objective.の倒置形であると。日本語だとそもそも主格自体意識されないから忘れられるという気がするんですが。

_ よしき (2006-01-31 09:39)

あ、目に見える云々のところは元のほうへのつっこみで、「通りすがりさん」あてではありませんでした。すみません。<br><br>受動態うんぬんは人それぞれの感じ方なので説得するのは難しいかもしれませんが、例えば"self goto: 100@100"というような式があったとき、「ここでこいつが座標100@100に行くのだな」と読み取るほうが、「Smalltalkがselfを100@100に行かせるのだな」と思うよりは自然ではないかと思いませんか?仮にそれを受動態だと思うことにしても、メッセージを送る主体は"Smalltalk"みたいなものではなくて、他の(含む自分)オブジェクトでしょう。<br><br>(もっとも、混乱を招くことをさらに書くと、オブジェクトと言うのは仮想的なコンピュータであって、再帰的により小さなオブジェクト/コンピュータから構成されている、という考え方がありますし、Smalltalkの中には"Smalltalk"という名前の付いたオブジェクトが存在したりしてはいますね^^;)<br><br>要は、<br><br> 1. objectiveとobjectとは大分違う単語である。<br> 2. 50年代からの用語だった、「メモリ上でまとまった領域、特にポインタを含むもの」という意味でのobjectという言葉にもobject-orientedという言葉のルーツがある。<br> 3. が、object-orientedと言う言葉は綿密に練られた結果生まれてきたわけでもない。<br><br>ことを考えても、object-orientedのobjectは一義的には「物」という意味であって、その物たちの間をメッセージが飛び交っている、というイメージが一番自然かと思います。

お名前:
E-mail:
コメント:
[]

«前の日記(2006-01-26) 最新 次の日記(2006-01-28)» 編集

track feed Matzにっき Creative Commons License This work is licensed under a Creative Commons License.