ECMAScriptのオブジェクト指向技術

オブジェクト指向言語の用語

オブジェクト

ECMA-262 はオブジェクトを「属性の無序列表、各属性が原始値、オブジェクト、または関数を保存する」と定義しています。厳密には、これはオブジェクトが特定の順序の値の配列であることを意味します。

ECMAScript はオブジェクトを定義する際に、コードの名前(人、場所、事物)の表現に基づいてより一般的な定義を使用しています。

クラス

各オブジェクトはクラスによって定義されており、クラスをオブジェクトのレシピと見なすことができます。クラスは、開発者がアクセスする属性やメソッド(インターフェース)だけでなく、オブジェクトの内部動作(属性やメソッドが機能するコード)も定義する必要があります。コンパイラやインタープリタはクラスの説明に基づいてオブジェクトを構築します。

インスタンス

プログラムがクラスを使用してオブジェクトを作成するとき、生成されたオブジェクトは「インスタンス」と呼ばれます。インスタンスの数に唯一の制約は、コードを実行するマシンの物理メモリです。各インスタンスの動作は同じですが、インスタンスは独立したデータセットを処理します。クラスからオブジェクトインスタンスを作成するプロセスは「インスタンス化」と呼ばれます。

前の章で述べたように、ECMAScript には公式なクラスはありません。代わりに、ECMA-262 はオブジェクトの定義を「オブジェクトのレシピ」として説明しています。これは ECMAScript の論理的な妥協案であり、オブジェクト定義は実際にはオブジェクト自身です。クラスが実際には存在しない場合でも、オブジェクト定義を「クラス」と呼ぶのは、多くの開発者がこの用語に馴染みがあるためであり、機能的には等価です。

オブジェクト指向言語の要件

オブジェクト指向言語には、開発者に4つの基本的な能力を提供する必要があります:

  1. 封装 - 関連情報(データやメソッドを含む)をオブジェクト内に格納する能力
  2. 集合 - 1つのオブジェクト内に別のオブジェクトを格納する能力
  3. 継承 - 他のクラス(または複数のクラス)から属性やメソッドを得る能力
  4. 多態性 - 過去の方法で実行できる関数やメソッドを書く能力

ECMAScript はこれらの要件をサポートしているため、オブジェクト指向と見なされます。

オブジェクトの構成

ECMAScript では、オブジェクトは属性(attribute)で構成されており、属性は原始値または参照値で構成できます。属性が関数を保存している場合、それはオブジェクトのメソッド(method)と見なされます。それ以外の場合、属性はオブジェクトの属性(property)と見なされます。