<クラスとオブジェクトの利用方法> ここでは、オブジェクト指向プログラミングについて述べます。MachiKaniaでは、クラス ベースのオブジェクト指向プログラミングが可能です。次のような特徴があります。  1)オブジェクトは、フィールド(public もしくは private)とメソッド(public のみ)  を持つ。  2)クラスの記述は別ファイルに於いて行ない、1ファイルに1クラスの記述とする。  3)複数のクラスを利用出来る。また、クラス中で別のクラスを利用出来る。  4)クラスの継承は、未実装。  5)フィールド名とメソッド名には、2文字以上6文字以内の英数字が指定出来る。 別ファイルとしてクラスを記述し、このファイルをクラス指定する事で、複数のファイル からなるプログラムを作成する事が可能です。クラス間の接続はフィールドとメソッドを 介してのみ行なわれます。したがって、同じ名前の変数やラベルが複数のファイルに於い て存在していたとしても、それぞれファイルごとに制御が行なわれますので、名前の衝突 が起きる事はありません。 <クラスの記述の仕方> クラスを作成するには、"クラス名.BAS"の名でテキストファイルを準備します。ただし、 クラス名は2文字以上6文字以内の英数字です。クラスファイルでは、FIELD, STATIC, METHOD命令が必須です(どれか1種類だけでも使えます)。 FIELD [PUBLIC] x[,y[,z[, ... ]]] クラスファイル中で、パブリックフィールドを宣言する。"PUBLIC"は省略可。 x,y,z等はフィールド名を6文字以内の英数字で指定。ただし、フィールドを文字列型 で使う場合は、「$」をフィールド名の後ろに付ける。 FIELD PRIVATE x[,y[,z[, ... ]]] クラスファイル中で、プライベートフィールドを宣言する。x,y,z等はフィールド 名を6文字以内の英数字で指定。ただし、フィールドを文字列型で使う場合は「$」を フィールド名の後ろに付け、配列として使う場合は「()」を付ける。 STATIC [PUBLIC] x[,y[,z[, ... ]]] クラスファイル中で、パブリックスなタティック変数を宣言する。"PUBLIC"は省略可。 STATIC PRIVATE x[,y[,z[, ... ]]] クラスファイル中で、プライベートなスタティック変数を宣言する。USEVARと同じ。 METHOD x クラスファイル中で、メソッドを宣言する。xは、メソッド名を6文字以内の英 数字で指定。 クラスファイル中でフィールド値(パブリック・プライベートの両方)にアクセスする場 合は、FIELD指定した長い名前の変数に直接アクセス(読み込み及び書き込み)して下さい。 「THIS」などの表記は必要ありません。 オブジェクトのフィールドではないスタティックな変数を扱いたい時は、STATICもしくは USEVAR命令を使って下さい。ここで使用した長い名前の変数は、他のファイルでの同一名 の変数の値に影響しません。ただし、変数A-Zの読み出し・変更は、他のファイルで使用 する値に影響します。 METHOD命令で宣言されたメソッドは、すべてパブリックです。プライベートなサブルー チン呼び出しには、LABEL命令とGOSUB命令/関数を用いて下さい。メソッド呼び出しの際 の引数は、ARGS()関数で取り出す事が可能です。メソッド中で自身のオブジェクトへの ポインターが必要な場合は、ARGS(-2)で取り出す事が出来ます。 コンストラクターを指定する場合は、「METHOD INIT」として下さい。このようにINIT メソッドが指定された場合、オブジェクト作成時に、このメソッドが呼ばれます。INIT メソッドに引数を与える事も可能です(引数は必須ではありません)。 記述例(CLASS1.BASの名前で保存):  FIELD PUBLIC TEST1,TEST2  FIELD PRIVATE TEST3  STATIC PUBLIC TEST7  METHOD INIT   IF ARGS(0)=2 THEN    TEST1=ARGS(1)    TEST2=ARGS(2)   ENDIF  RETURN  METHOD TEST4   TEST1=ARGS(1)   TEST2=ARGS(2)  RETURN  METHOD TEST5   TEST3=TEST1+TEST2+TEST7  RETURN  METHOD TEST6  RETURN TEST3  METHOD TEST8  RETURN TEST7 <オブジェクトの作成方法> オブジェクトを作成するためには、まずUSECLASS命令で使用するクラスを指定し、次に NEW関数を用います。 USECLASS x[,y[,z[, ... ]]] クラスの利用を宣言する。x,y,z等は、クラス名を6文字以内の英数字で指定。 NEW(x[,y[,z[, ... ]]]) クラスオブジェクトを作成し、オブジェクトへのポインターを返す。xはクラス名 を指定。y,z等はコンストラクターがある際に利用される引数。 記述例1:  USECLASS CLASS1  A=NEW(CLASS1) 記述例2(コンストラクターに引数を指定する場合):  USECLASS CLASS1  A=NEW(CLASS1,123,456) <オブジェクトの破棄方法> 作成したオブジェクトは、DELETE命令を用いて破棄する事も出来ます。ただし、デストラ クターは実装していませんので、必要ならば、それ用のメソッドを作成して破棄する直前に 呼び出して下さい。 オブジェクトのフィールドに文字列もしくは配列を用いている場合、オブジェクトを DELETEするだけではこれらの領域は破棄されません。その場合、まずメソッド内でこれら のフィールドを破棄(DELETE命令が使えます)してから、オブジェクトを破棄するようにし て下さい。 記述例:  USECLASS CLASS1  A=NEW(CLASS1)  DELETE A <フィールドへのアクセス方法> パブリックフィールドへアクセスする場合は、オブジェクトを含む変数に続けて「.」と フィールド名を記述して下さい。フィールドが文字列の場合は「$」を、実数の場合は 「#」を、それぞれ後ろに付けて下さい。 記述例:  USECLASS CLASS1  A=NEW(CLASS1)  A.TEST1=123  PRINT A.TEST2 <メソッドへのアクセス方法> パブリックメソッドへアクセスする場合は、オブジェクトを含む変数に続けて「.」と メソッド名、続けて「( )」を記述して下さい。メソッドが戻り値として文字列を返す場 合、メソッド名の後ろに「$」を付けて下さい(実数の場合は「#」)。メソッドは関数 と同じ扱いですが、戻り値を利用しない場合は、CALL命令により呼び出す事も出来ます。 CALL x xで指定されたオブジェクトのメソッドを呼び出す。 記述例(579が表示される):  USECLASS CLASS1  A=NEW(CLASS1)  CALL A.TEST4(123,456)  CALL A.TEST5()  PRINT A.TEST6() <スタティック変数・スタティックメソッドの利用> クラス中で"STATIC PUBLIC"で指定された変数は、外部から値を参照したり、値を変更 したりすることが出来ます。この場合、クラス名に続けて「::」と変数名を記述して下 さい。 また、それぞれのメソッドは、スタティックメソッドとして利用する事も出来ます。こ の場合、クラス名に続けて「::」とメソッド名、続けて「( )」を記述して下さい。 記述例(123が表示される):  USECLASS CLASS1  CLASS1::TEST6=123  PRINT CLASS1::TEST7() <ライブラリーについて> クラスファイルは、カレントディレクトリーに「クラス名.BAS」ファイルが有れば、読み 出されます。もしカレントディレクトリーに無ければ、「\LIB\クラス名\クラス名.BAS」 を探し、有ればそれが読み出されます。従って、「\LIB」ディレクトリーにクラス群を 配置しておけば、いつでも使用可能なライブラリーとして使えます。 <バージョン履歴> ・KM-1207/KM1302 2019年3月公開。