クラスはオブジェクトと同義だとずっと思っていた
OOP 文献の言語は、特定のものではない場合があります。プログラミング言語がオブジェクトとは何かについて多少異なる概念を持っていることも助けにはなりません。
クラスは、オブジェクト (そのクラスのインスタンス) が作成されるテンプレートまたは定義です。つまり、クラスは、そのクラスのオブジェクト (またはタイプ... 詳細は後述) の構造、型シグネチャ、および動作を提供します。
オブジェクトは、そのクラスのインスタンスのメモリ内の単なる場所です。
ウィキペディアはこれに関する優れたドキュメントを提供しています。私はあなたがそれを読むことをお勧めします:
http://en.wikipedia.org/wiki/Class_(computer_programming )
http://en.wikipedia.org/wiki/Object_(オブジェクト指向プログラミング)
また、typeという概念があります。型 (または、一部の文献やプログラミング言語で呼ばれることがあるインターフェイス) は、通常、型/メソッド シグネチャ (および場合によっては動作) のコレクションです。Java インターフェイスや C++ の純粋仮想クラスなどは、型を表す傾向があります(ただし、まったく同じというわけではありません)。
次に、その型に準拠するクラス(インターフェースまたは純粋仮想クラス) は、その型の実装です。
そのクラス、その型の実装は、そのクラス/型のオブジェクトをメモリ内に構築する方法の単なるレシピです。
クラス/タイプをインスタンス化するときは、具体化して、そのクラスのインスタンス (オブジェクト) をメモリ内に構築します。
C++ では、クラス自体はインスタンス化されないため、クラスはオブジェクトではありません。C++ クラスは、他のクラスのインスタンスではありません (上記の定義を参照してください)。
OTH、Java などの言語では、クラス自体は基本クラス (java.lang.Class) のインスタンスによって表されます。したがって、クラス X には、それに関連付けられたメモリ内のオブジェクト (java.lang.Class インスタンス) があります。そして、その「クラス」オブジェクトを使用して、(理論的には) クラス/タイプ X の別のインスタンス (またはオブジェクト) をインスタンス化または製造できます。
混乱する可能性があります。クラス、型、プロトタイプ、オブジェクト/インスタンスに関する文献を検索して読むことを強くお勧めします。
そして、私はこの声明が何を意味するのかについて混乱しています。クラスはどのようにオブジェクトではなく、
上記で説明したとおりです。クラスはオブジェクトではありません。オブジェクトはインスタンスであり、クラスまたは型の「レシピ」によって構築および初期化されるメモリの一部です。
また、言語が静的であることが重要なのはなぜですか?
たとえば、Java は静的に型付けされますが、クラス自体がオブジェクトになる可能性があるため、本のその部分は少し誤解を招く可能性があります。おそらく、テキストは動的に型付けされた言語 (JavaScript など) について言及している可能性があります。この言語では、クラスもオブジェクトまたはインスタンスになる可能性があります。
私の提案は、オブジェクトという言葉を決して使用せず、語彙を単に「クラス」と「インスタンス」に限定することです。しかし、それは私の個人的な好みです。他の人は同意しないかもしれません。