ゲームソフトウェア設計論 2013年度定期試験対策要点解説

■確認問題

動物園シミュレーションゲームを作るために,まず次の Animal クラスを定義しよう。

 (a)動物一般を表す public な抽象クラス Animal
   ・生成されたAnimal型オブジェクトの総数を表す private な int型の staticフィールド num (初期値は0)
   ・現在位置(2次元座標)を表す private な double 型フィールド x, y
   ・num の publicでstaticなゲッタ int getNum( )
   ・x の public なゲッタ double getX(),xのpublicなセッタ void setX( double x )
   ・y の public なゲッタ double getY(),yのpublicなセッタ void setY( double y )
   ・フィールドx,yを初期化し,numの値を1増やすpublicなコンストラクタ Animal( double x, double y )
   ・「鳴き声を出す」という振る舞いを表すpublicな抽象メソッド void cry( )

※問題全体はこちらを参照。


●第1段階
 まず,public な抽象クラス Animal を中身カラの状態で定義してみよう。
 ・そもそもクラスやその定義方法についてわからない場合は,「クラスとオブジェクト」を復習すること。
 ・クラスを public に指定することで, そのクラスが他のパッケージからアクセスできるようになる。public 指定できるクラスは,1ソースファイルに1個だけ。([パッケージとアクセス指定]参照)
 ・抽象クラス に関しては,「抽象クラスと抽象メソッド」を参照。



●第2段階
  次に,以下のフィールドを定義する。
  ・ private な int型の staticフィールド num (初期値は0)
  ・ 現在位置(2次元座標)を表す private な double 型フィールド x, y
  要点は次の通り。
  ・staticメンバは各オブジェクトに属するのではなく,クラスにただひとつ存在するメンバである。オブジェクトを生成する前から存在する。 (「staticメンバ」参照)
  ・以下のようなメンバのアクセス指定について知っている必要がある。(「クラス外からのアクセス禁止」参照および[パッケージとアクセス指定]参照)
    (1)メンバを private にすると他のクラスからそのメンバにアクセスできない。
    (2)メンバを public にすると,そのメンバは他のクラスからもアクセスできる。
    (3)何もアクセス指定しないと,そのメンバは同じパッケージのクラスからしかアクセスできない。
  ・オブジェクト指向の常識では,フィールドはすべて private にすべき。 (「公開と非公開の意味」参照)


 ところで,複数の変数を宣言するときに以下の様にカッコで囲む人がいるが,これは間違いである。
 


●第3段階
 次に, 以下の用に各フィールドに対応するアクセッサを定義する。
  ・num の publicでstaticなゲッタ int getNum( )
  ・x の public なゲッタ double getX(),xのpublicなセッタ void setX( double x )
  ・y の public なゲッタ double getY(),yのpublicなセッタ void setY( double y )
 要点は次の通り。
  ・メソッドの定義が分からない場合は,「メソッド」を参照して復習すること。
  ・フィールドは private にして,必要に応じて各フィールドへアクセスするためのメソッド(アクセッサ)を定義する。 (「公開と非公開の意味」参照)
  ・ フィールドの値を取得するアクセッサがゲッタ,フィールドに値を設定するアクセッサがセッタ。
   ※staticフィールド用のアクセッサは staticメソッドで良い。



●第4段階
 次に, 以下のコンストラクタを用意する。
  ・フィールドx,yを初期化し,numの値を1増やすpublicなコンストラクタ Animal( double x, double y )
 要点は次の通り。
  ・コンストラクタの意味と定義方法が分からない場合は,「クラスとオブジェクト(その2)」を参照して復習すること。



●第5段階
 次に, 以下の抽象メソッドを定義する。
  ・「鳴き声を出す」という振る舞いを表すpublicな抽象メソッド void cry( )
 要点は次の通り。
  ・スーパークラス用に考えたクラスは,振る舞いを具体的に定義できない事が多い。
    そのように具体的な処理定義できないメソッドは抽象メソッドとして定義する。 (「「抽象クラスと抽象メソッド」参照)



これで,抽象クラス Animal の定義が完了する。
ソースファイル名は,当然,Animal.java となる。