「プロトタイプベース」の版間の差分

削除された内容 追加された内容
G000001 (会話 | 投稿記録)
m 少なくともCLOS(Common Lisp)とDylanはプロトタイプ指向ではありませんので、一覧から削除しました。
3行目:
{{プログラミング・パラダイム}}
 
'''プロトタイプベース''' ({{lang-en-short|''prototype-based''}}) は、[[オブジェクト指向プログラミング]]のスタイルのひとつであり、{{仮リンク|メタオブジェクト|en|Metaobject|label=}}の仕組みを中心にした手法を指す。インスタンスベース(''instance-based'')とも呼ばれる。プロトタイプベースは1990年代前半から認知されるようになった後発のスタイルであり、先発の[[クラスベース]]のオブジェクト指向とは明確に区別されている。「[[Smalltalk]]」「[[Objective-C]]」「[[CLOS]]」「[[Self]]」「[[Oz (プログラミング言語)|Oz]]」「[[Lua]]」「[[Dylan]]」「[[Python]]」「[[JavaScript]]」「[[Ruby]]」「[[Io (プログラミング言語)|Io]]」「[[REBOL]]」「[[Julia (プログラミング言語)|Julia]]」といった[[スクリプト言語]]や[[Webプログラミング|Webプログラミング言語]]を中心に支持されている。
 
メタオブジェクト(''metaobject'')は「[[LISP]]」由来のプログラム概念であり、実装的には[[変数 (プログラミング)|変数]]と[[関数 (プログラミング)|関数]]双方の[[識別子|識別名]]と[[参照 (情報工学)|参照値]]をペア定義できる可変サイズの[[構造体|データ構造体]]であることが多い。[[委譲]]先となる別のメタオブジェクトの識別名と参照値もペア定義できる。メタオブジェクトはフレーム&スロット(''frame&slot'')の機構名で読み替えられてもいる。プログラミング言語仕様上ではプロトタイプ(''prototype'')の機能名で実装されていることが多い。クラスの機能名で実装している言語もあるのでこの場合は誤解を招きやすくなっている。プロトタイプを複製して[[インスタンス]]が生成される。インスタンスはオブジェクトとも呼ばれる。プロトタイプは動的にカスタマイズできる「[[型システム|型]]」と見なせるものであり、その型を複製=量化したインスタンスは自由に加工/計算/代入できる「[[値 (情報工学)|値]]」になる。