クラスとオブジェクトの関係
1.4 クラスとオブジェクトの関係
前節にて説明しましたが、クラスはオブジェクトの雛形となるプログラムです。クラスが無ければ当然ながらオブジェクトは生成することはできません。
但し、クラスはただの雛形ですので、なんらかの実体を表している訳ではありません。実体を表すのはクラスを元にして生成されたオブジェクトであり、オブジェクトの属性はその「実体」毎にそれぞれの情報に対応する値が設定されます。
図 1.4.1: オブジェクトの属性情報
図1.4.1のパソコンの例で言うと、雛形であるクラスには、「3種類の属性と操作があり、それぞれこのような内容です」と言うことが記述されています。クラスの属性に関しては、どういう種類の属性があるかということは定義されていますが、それが実際にどんな値であるかまでは定めていません。
これに対してオブジェクトは「OSはWindows XP、CPUはCore2 Duo、メモリは2Gで3種類の操作を持っています」というように、属性の値が定まる形になっています。このオブジェクトが持つ属性のことを属性値と呼びます。
雛形であるクラスからは1つのオブジェクトだけではなくいくつでもオブジェクトを生成することが可能です。
その際に、オブジェクト毎に異なる属性の値を持たせることができます。逆に言うと属性の値は、個々の実体であるオブジェクト毎に異なるものが入るべきです。
図 1.4.2: クラスから複数のオブジェクトを生成
クラスを元にしてオブジェクトを生成することをオブジェクト化またはインスタンス化と呼び、そのとき生成されたものをオブジェクトまたはインスタンスと呼びます。どちらの意味も同じですが、本テキスト内では今後オブジェクト化とオブジェクトを使用していきます。
別の視点から見るクラスとオブジェクトクラスはプログラムとしてファイルに記述し、コンパイルによってクラスファイルに変換されたものです。それに対してオブジェクトは、プログラムを実行している時にコンピュータのメモリ上に生成されるものです。