2007年12月15日土曜日

オブジェクト指向プログラミング機能の空間を限定したい.

変なタイトルになってしまった.思ったことを記述していることもあり間違ってること書いてるかもしれないので,適宜つっこみをいれてほしいw

さて,オブジェクト指向プログラミング機能の実装は,大きく分けてメッセージベースとクラスベース,プロトタイプベースがあると思う.最近特に興味があるのは,プロトタイプベース.なんでかというと,クラスベースが,オブジェクト指向プログラミング機能をプログラムの広い空間に保持しているのに対し,プロトタイプベースは,比較的狭い空間に保持しているから.(あいまいな表現で,僕の主観的イメージ.)

もうすこし具体的な話.クラスベースで,クラスはさまざまなメソッドからnewできるようなところに存在しなければならない.スコープによる限定があるじゃないかって話もあるとは思うんだけどね.プロトタイプベースでは,オブジェクトをメソッドでnewする形になるので,オブジェクトがそこに受け渡されなければならない.オブジェクトにもスコープがあるじゃないかって話もあるだろうね.

うん,なんというか,newの被演算子であるひな形にあたるもの(クラスベースならクラス.プロトタイプベースならオブジェクト(とプロトタイプ).)が,イメージとして,メソッドの外にあるのがクラスベースで,内にあるのがプロトタイプベースだなぁと.

で,何を考えているのかというと,宣言型言語へオブジェクト指向プログラミング機能を入れるとしたら,プロトタイプベースが向いているんじゃないかなってこと.たとえば,Prologへのオブジェクト指向の導入とかね.

オブジェクト指向設計からオブジェクト指向プログラミングをするとしたら,クラスベースの考え方を実現できる必要がある.プロトタイプベースではある程度実現できる.プロトタイプベースなら宣言型言語へ導入しやすいのではないか.ということ.

ただ,今日ECMAScriptの仕様書であるECMA-262 第3版を読んでて気づいたんだけど,プロトタイプチェーンという存在(プロトタイプベースの要なんだけどねwww)が裏側では広い空間を使っちゃってるなぁと.なんでいままで気づかなかったのかといわれると馬鹿だからってしかいえないけどw

それで,プロトタイプベースよりもさらに空間を限定できる.つまり,狭い空間だけで完結するオブジェクト指向言語はないものかということになった.調べたけど,見つからなかったwんー,そもそもこれ以上狭い空間だけで完結するオブジェクト指向プログラミング機能は実装できるのかどうかがあやしい.これから考えていこうと思う.

今回は,かなりグダグダだな〜.