« クラスとは何か? | メイン | クラス定義ファイルとクラス定義の構造 »

クラス定義とインスタンス

オブジェクト指向プログラミングやクラス定義の説明の前に「オブジェクトとは何か?」「クラス定義とは何か?」という話をしておきましょう。
次の図はredCarオブジェクトを示したものです。redCarオブジェクトにはcolorとtypeの2つのプロパティがあり、それぞれ"red"と"at"という値をもっています。さらにredCarオブジェクトにはrun()というメソッドもあります。run()が何を行うメソッドなのかはこれだけではわかりませんが、名前からするとrun()を実行するとredCarが走るメソッドだろうと想像できます。


図4-1-1 redCarオブジェクトには2つのプロパティと1つのメソッドがあります。

次の図はblueCarオブジェクトです。redCarオブジェクトと同様にcolorとtypeの2つのプロパティとrun()メソッドがあります。


図4-1-2 blueCarオブジェクトにも2つのプロパティと1つのメソッドがあります。

次のcardもオブジェクトです。カードはデータつまりプロパティだけという作りも考えられますが、カードを表示したり、urlをリンクするといった機能をcardオブジェクト自身のメソッドとして組み込むやりかたもあります。ここではプロパティとメソッドを両方持ったcardオブジェクトになっています。

図4-1-3 cardオブジェクト

このようにオブジェクトはプロパティ(属性)の値とメソッド(関数)を自分自身でもっています。これを図に示すと次にようになります。

図4-1-4 オブジェクトとは、プロパティ(属性)の値とメソッド(関数)を自分自身でもったものをいいます。


では、どうやってこのような構造を持ったオブジェクトを作るのでしょうか。先のredCarオブジェクトとblueCarオブジェクトはプロパティの値が違うだけでプロパティの項目やメソッドは同じである点に注目してください。そこで次のようにオブジェクトの仕様を定義したものを用意し、それに基づいてredCarとblueCarのオブジェクトを作れば、オブジェクトを効率よく作れることがわかります。これは車を作るにはまず車の設計図を用意し、あとはそれに基づいて車を大量生産するのに似ています。
ここで、オブジェクトの仕様を「クラス」と呼び、クラスに基づいて作られたオブジェクトを「インスタンス」と呼びます。すなわち、Carクラスを定義して、redCarオブジェクトとblueCarオブジェクトというインスタンスを作ります。

図4-1-5 Carクラスを定義して、redCarとblueCarのインスタンスを作ります。


クラス定義からインスタンスを作るという図を一般化して示すと次のようになります。用語としては、「クラスからインスタンスを作る」、「クラスからインスタンスを生成する」といった言い回しが使われています。なお、プロパティとメソッドのことをメンバーと呼びます。後述するように、メンバーにはクラスメンバーとインスタンスメンバーがあります。

図4-1-6 オブジェクトの仕様を決めた「クラス定義」を用意し、それに基づいて「インスタンス」を生成します。


note:
Flashではライブラリからシンボルをステージに配置したものもインスタンスと呼びますが、これはMovieClipクラスやButtonクラスなどからインスタンスを作る行為を手作業で行っていると言えます。

投稿者 oshige : 2005年2月21日 11:14