next up previous contents
: クラスベースとプロトタイプベース : Smalltalk : Smalltalkとは   目次

オブジェクト指向

Smalltalkはオブジェクト指向(object-oriented)という考え方をもとにしている言語である。これはある事柄を、相互にメッセージ(message)を送りあうオブジェクト(object)の集まりとして捉える考え方であり、人間の考え方や言語に近い表現法である。

ここにコリーとドイツ・シェパードの2匹の犬がいるとする。この2種には色々と異なった性質もあるが、共通の性質もたくさんあるはずである。例えばこの2匹に餌をやるとき、種類の違いはさほど気にしないはずである。なぜなら全ての犬が肉食である事は知っているので、肉を与えればいいからである。つまり、コリーとドイツ・シェパードは両方とも犬であるため、犬の「肉食」という性質を持っているのである。あるいは、犬がにおいを嗅ぐという動作をする時、犬種によって違う動作をするということはまずない。つまり、犬には「嗅ぐ」という共通の動作も備わっているのである。このように、「犬」のようなあるオブジェクトの性質と動作を決定する雛形をクラス(class, 分類)と呼ぶ。また、コリーやドイツ・シェパードは犬のサブクラス(subclass, 下位分類)であり、犬の性質を受け継いでいる。このクラスの関係を継承関係と呼び、「コリーとドイツ・シェパードは犬という親クラス(スーパークラス)を継承している」ということができる。

ここで、‘ラッシー’という名前のコリーがいるとする。このとき、‘ラッシー’は‘コリー’のインスタンス(instance, 実態、例)である、という。‘ラッシー’に対して「嗅ぐ」というメッセージを送れば、‘ラッシー’は犬の動作を継承しているのでそのとおりの動作をするが、「喋る」のように、そのクラスが知らない動作は行うことができない。このような動作をオブジェクト指向ではメソッドと呼ぶ。また、‘ラッシー’が3歳であるとすれば、その情報はインスタンスが持つ変数オブジェクトに保持されていなければならない。このようにインスタンスが持つ変数をインスタンス変数(またはプロパティ)と呼び、クラスの定義に記述すると、そのクラスから生成された全てのインスタンスがその変数を持つ事になる。



Deguchi Lab. 平成20年3月5日