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