オブジェクト宣言

(静的オブジェクトの生成)

オブジェクトとは(一般論)

Mopsはオブジェクト指向開発環境です。簡単にいえば、クラスと呼ばれる枠組みを作って、特定の構造をもつデータと、そのデータを処理する手続を1パックにまとめることができるということです。実装としてみれば「特定の構造をもつデータ」の具体化がオブジェクトまたはインスタンスと呼ばれるわけです。

Mopsのドキュメントなどでは、枠組みはクラス、その具体化はオブジェクト、と普通は呼ばれています。巷に流布しているもっと観念的な見方では、クラスもまた一つのオブジェクト、アプリケーションもまた一つのオブジェクト、クライアントもサーバもそれぞれ一つのオブジェクト(とかエージェント)であることになりますので、クラスはクラスオブジェクトと呼ばれます。すると、オブジェクトオブジェクトじゃあまりにアホっぽいので、オブジェクトは、インスタンスオブジェクトと呼ばれます。で、何にでもつく「オブジェクト」はうるさく、クラスとインスタンスで十分わかるだろうということになります。インスタンス(instance)は具体例というような意味の英語です。ですから、呼び名は文献によって様々で、大きく分ければ、C++ないしJava風の語法とSmalltalk風の語法があります。実際に何を意味しているのかが分かれば、言葉の細部にこだわる必要はありません。

オブジェクトとは、オブジェクト指向理論からいえば、送られてきたメッセージを受けて自分で適切なデータ処理を行うことができる存在です。しかし、実装からいえば一塊のデータ、あるいは、その格納領域です(Cの構造体やPascalのレコードに類するものです。)。Mopsでは、一般のオブジェクトは、他のもっと小さく基本的な"オブジェクト"の集まりです。オブジェクトの内部構造をつくっている成分はインスタンス変数と呼ばれ、Ivarと略記されます(構造体のメンバのようなものですが、それ自体もまた通常は何らかのクラスに属するオブジェクトであるという点が違います)。このIvarが(通常)複数集まって一つのオブジェクトを作り上げているというわけです。

静的オブジェクト

オブジェクトのうち、プログラムの初めから終わりまで存続し続けるのが静的オブジェクトです。このタイプのオブジェクトは扱いが簡単であり、宣言によって生成することができます。例えば、
ACLASS   anObject
と地の部分(インタープリタ状態)で宣言すると、ACLASSクラスのオブジェクトanObjectが生成されます。オブジェクトの生成をインスタンス化(Instantiation)と呼びます。

宣言の後は、静的オブジェクトには、いつでも、どこからでもアクセスすることができます。もちろん、「アクセス」はオブジェクト名に対してメッセージを送ることによって行われます。

実装としていえば、静的オブジェクトは、生成と同時に辞書内にコンパイルされ、インストールするときには実行コードの中にデータとして組み込まれます。そのような性質のため、生成後はずっとメモリの一部を占拠し続けます。そのような意味では、メモリ効率はあまり良くありません。しかし、プログラムの初めから終わりまでずっと存続し続けるようなGUIオブジェクト(例えば、メニュー)を静的オブジェクトとして宣言することに躊躇する必要はないと思います。


関連項目:






最終更新:2019年03月11日 17:52