コンテンツにスキップ

プロトタイプベース

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。ZéroBot (会話 | 投稿記録) による 2011年9月4日 (日) 17:59個人設定で未設定ならUTC)時点の版 (r2.7.1) (ロボットによる 追加: fi:Prototyyppipohjainen ohjelmointi)であり、現在の版とは大きく異なる場合があります。

プロトタイプベースとは、オブジェクト指向言語と総称されるプログラミング言語のうち、プロトタイプ基礎(ベース)としてオブジェクトを取り扱うものをいう。インスタンスベースとも。一方、オブジェクトの取り扱いをクラスでおこなっているものをクラスベースとよぶ。

プロトタイプベースオブジェクト指向言語は一般的なオブジェクト指向言語とは対照的に、静的なクラスを持たず、新しいオブジェクトを既存のオブジェクトのクローンから作成する。Smalltalkを元にクラスの複雑性を排除したSelfが特に有名である。他にJavaScriptNewtonScriptIoなどがプロトタイプベース(またはその機能を持つ)と考えられる。

特徴

クラス = 構造化されたデータ + それに所属するメソッド、という考え方はプログラムの整理に劇的な威力を発揮する。しかし、全てがクラスベースであるという前提は時に物事を複雑化してしまう。

問題となるのはクラスが静的な構造と結びついているという点である。

例えばメソッドが必ず何らかのクラスに所属するという前提は強すぎる場合がある。クラスベースでは委譲や代理(プロキシ)によって動作にバリエーションを与えるが、初めからバリエーションをもったインスタンスを作成できればそのような機構は必要ない。

またインスタンス変数とメソッドの違いとは何か、という問題もある。C++Javaのpublicなメンバ(フィールド変数)などを別にすれば、インスタンス変数とアクセサメソッドはほとんど等価の概念である。

そこでプロトタイプベースでは、全てのオブジェクトをスロットなどと呼ばれる、アクセス名と結びついた汎用の変数領域の塊でできた可変構造体として捉え直し、そこに他のオブジェクトへの参照やメソッドなどを自由に定義できるようにする。つまりオブジェクトは参照とメソッドの集積体であり、いかなる静的構造とも結びつかない。

クラスが存在しない世界ではテンプレート処理によるインスタンス化ができないため、新しいオブジェクトは完全に空の状態か、または他のオブジェクトの複製(クローン)によって作成される。プロトタイプベースでの継承は一般にこのクローンによる特性の引き継ぎを指す。

関連項目