世の中全てオブジェクト

Object REXXはお馴染みのREXXの全ての機能を、共通な物毎に内蔵クラスにまとめている。そのため手続き的な書法からオブジェクト指向プログラミングに容易に移行することができる。クラスとはObject REXXのインタプリタが新しいオブジェクトを生成する際、鋳型として利用されるものである。クラスはそれから生成された全てのオブジェクトの振る舞いを定義する。Object REXXはたくさんの内蔵クラスを持っており、多彩なオブジェクトを生成するのに使える。例えば文字列オブジェクト、ストリームオブジェクト、配列オブジェクトなどである。

REXXでは全てのものが文字列であった。Object REXXでは全てのものがオブジェクトである。即ち、現存するプログラムを少しづつオブジェクトを利用したプログラムに書替えていくことができる。主たる違いは次の点である。REXXでは変数(オブジェクト)を関数に渡し何かの動作を行わせたが、Object REXXではオブジェクトにメッセージを送る。メッセージを送るための演算子は波線'‾'である。

どういう事かというと:

/* output the second word of a string (REXX) */
/* 文字列の2つめの単語を出力する (REXX) */
A = "This sentence has five words."
Say Word(A, 2) /* will output "sentence" */

/* output the second word of a string (Object REXX) */
/* 文字列の2つめの単語を出力する (Object REXX) */
Say A‾Word(2)  /* will output "sentence" */
2つ目の例では、'Word'というメッセージを変数A(これは普通のREXXにおけるやりかたで変数宣言されている)に送っている。Aにメッセージが送られた結果は画面に現れる。Aは特定のクラス(または型)のオブジェクトとして宣言されているわけではないので、自動的に文字列クラス(内蔵クラスの一つ)として生成される。'WORD'はこのクラスが処理できる有効なメッセージである。クラスは共通の振る舞いをするオブジェクトを作るための特定の型、と見ることができる。

クラスからオブジェクトを生成するには、そのクラスに 'New' というメッセージを送る。メッセージが処理されると、そのクラスのオブジェクトが一つ生成される。Object REXXでは、全ての内蔵クラスの名前には先頭にドット '.' を付ける。

文字列オブジェクトを明示的に生成するには、次のようにコードを書く:

/* create the string object D */
/* 文字列オブジェクトDを生成する */
D = .String‾New("This is a string object")
Say D  /* will output "This is a string object" */
       /* "This is a string object"を出力する */


[ Next page | Tutorial Index | ]