プログラミング言語Small Basicを使ってプログラミングを学んできました。一段落したので、今度はJavaというプログラミング言語を使って、主にゲームプログラムを題材にしながら、プログラムをどう作ればよいか探究していきたいと思います。
プログラミング言語Javaにはいくつか特徴がありますが、まずはオブジェクト指向言語であるということが挙げられると思います。オブジェクト指向のプログラミングのことをオブジェクト指向プログラミング(OOP)と言います。OOPとはいったい何でしょうか。
OOPの特長をいくつか挙げてみます。
(1) 作ったプログラムが再利用しやすい。
(2) 「もの(オブジェクト)」に着目して設計する。
(3) アルゴリズムやデータをどう実現するか意識せずインタフェースのみを設計できる。
今回はこのようなJavaの特長を意識しながら、Small Basicで作った三目並べのプログラムをJavaに移植しようと思います。
そこでまず三目並べの盤を設計するところから始めましょう。
Small Basicで作った三目並べプログラムには、盤に関して以下のようなサブルーチンがありました。
Board_Init() ‘盤を初期化する
Board_New() ‘盤を新しいゲームの状態にする
Board_Draw() ‘盤を表示する
Board_Move() ‘盤に次の手を打つ
Board_Unmove() ‘先ほどの手を止める
これらを盤という「もの(オブジェクト)」に対する操作であると考えるのがオブジェクト指向です。この盤というオブジェクトを抽象化したクラスBoardをまず定義します。クラスは内部に2種類のメンバを持ちます。一つはフィールドと呼ばれる変数、もう一つはメソッドと呼ばれる操作(サブルーチン)です。
クラスBoardには上記と同じようなメソッドを定義します。
Board.init() ‘盤を初期化する
Board.new() ‘盤を新しいゲームの状態にする
Board.draw() ‘盤を表示する
Board.move(int iX, int iY) ‘盤に次の手を打つ
Board.unmove() ‘先ほどの手を止める
このようなクラスのメソッドの定義は、このクラスを使う人にとってのインタフェースということになります。インタフェースには実際の盤がどのように実現されるかという情報はありません。どう実現するかは、後で自由に変更できるように、外には見せないようにします。この段階ではフィールド(クラス内部の変数)については定義しません。
Small Basicには変数の型という概念がなかったのですが、CやJavaなどの言語には変数の型という概念があります。整数(int)という型の変数には、実数や文字列を代入できないようになっています。
クラスという概念は、この型を変数だけではなくアルゴリズムにも適用するように拡張した概念と言えます。同じ型の変数をいくつも作れるように、同じクラスのオブジェクトをいくつも作れます。整数(int)という型の変数を定義するとき、
int i;
と書きますが、クラスBoardのオブジェクト(インスタンスと言います)brdを定義するときは、
Board brd;
と書きます。
また、Small Basicにはサブルーチンの呼び出し時に引数(パラメータ)を指定できませんでしたが、Javaではメソッドの呼び出し時に、
brd.move(iX, iY);
のように指定することが可能です。引数を指定することで、外からどの情報を与えるのかが明確になります。
(つづく)