第6回 課題

●自分で好きな対象を決め,その概念を表記するクラスを定義せよ。その際,次のような
 条件を満たすこと。

  1. クラスは,「物」を表す名詞単語であること
    (例:Car, Cat, Dog など。Running, Walking, Work などの動詞やGood, Quicklyなどの形容詞・副詞であってはいけない)
  2. クラス名の頭文字は大文字にすること
    (例:elevatorではなく,Elevatorとする)
  3. メンバ名の頭文字は小文字にすること
    (例:Open()ではなく,open()とする)
  4. 適切なフィールド(データメンバ)2個以上
  5. 適切なメソッド2個以上
  6. 適切なコンストラクタ1個以上 (すべてのフィールドを初期化すること)
  7. main()メソッドをつけて,その中でそのクラスのオブジェクトを生成し,各メソッドを呼び出す。
  8. 今回作ったファイルは消さずに取っておくこと。(次回以降の課題に使う可能性がある)

 実際にコンパイルして実行できるようにすること。完成したソースプログラムをWebClassの「オブジェクト指向アプローチ論」の「テスト/アンケート」欄 から,来週授業前までに提出すること。

●例 (提出物は,この例とは異なるクラスにすること。この例と同内容のものは採点対象外とする)

 ・対象を「エレベーター(elevator)」とする。したがって,クラス名をElevatorとする。以前学習したように
  クラス名とファイル名を一致させるために,プログラムファイル名をElevator.javaとする。
 ・エレベーターを特徴づける情報として,「現在何階にいるか」,「現在何人乗っているか」がある。
  そこで,

int  floor;   // 現在何階にいるかを表すフィールドfloor
int  n;       // 現在何人乗っているかを表すフィールドn

  という2つのフィールドを用意することにする。

 ・エレベーターの振る舞いとしては,「ドアを開ける」「ドアを閉める」「x人乗る(-x人降りる)」「k階へ移動する」
  などが考えられるので,それぞれをメソッドとして以下のように用意する。

void open()  { System.out.println( "opening the door..." ); } // ドアを開ける 
void close() { System.out.println( "closing the door..." ); } // ドアを閉める
void takeIn( int x ) { n = n + x; System.out.println( "taking in " + x + " people..." ); } // x人乗る(-x人降りる)
void move( int k ) { floor = k; System.out.println( "moving to floor " + k ); }   // k階へ移動する
  ※メソッド takeIn() と move() はそれぞれフィールドfloorとnを操作していることに注意せよ

 ・フィールドfloorとnを初期化するコンストラクタを次のように定義する。

Elevator( int floor, int n ) {  // floorは階数で,nは現在乗っている人数
  this.floor = floor;    
  this.n = n;
}

 ・main()メソッドは次のようにしてみる。

public static void main( String args[] ) {

  Elevator e = new Elevator( 1, 0 );  // エレベーターオブジェクト生成。初期化時には1階にあって,誰も乗せていない状態

  e.open();        // ドアを開ける
  e.takeIn( 3 );   // 3人乗せる
  e.close();       // ドアを閉める

  e.move( 5 );     // 5階へ移動

  e.open();        // ドアを開ける
  e.takeIn( -2 );  // 2人降ろす
  e.close();       // ドアを閉める

  e.move( 7 );     // 7階へ移動

  e.open();        // ドアを開ける
  e.takeIn( -1 );  // 1人降りる
  e.close();       // ドアを閉める
}

 ・以上をプログラムにすると次のようになる。ファイル名は,Elevator.java となる。

// ファイル名は Elevator.java
class Elevator {
  // フィールド
  int floor; // 現在何階にいるかを表すフィールドfloor
  int n; // 現在何人乗っているかを表すフィールドn

  //メソッド
  void open() {  // ドアを開ける
    System.out.println( "opening the door..." );
  } 

  void close() { // ドアを閉める
    System.out.println( "closing the door..." );
  }

  void takeIn( int x ) {  // x人乗る(-x人降りる) 
    n = n + x;
    System.out.println( "taking in " + x + " people..." );
  }

  void move( int k ) {    // k階へ移動する
    floor = k;
    System.out.println( "moving to floor " + k );
  }

  // コンストラクタ
  Elevator( int floor, int n ) { // floorは階数で,nは現在乗っている人数
    this.floor = floor;
    this.n = n;
  }

  // main()メソッド
  public static void main( String args[] ) {

    Elevator e = new Elevator( 1, 0 );  // エレベーターオブジェクト生成。初期化時には1階にあって,誰も乗せていない状態

    e.open();        // ドアを開ける
    e.takeIn( 3 );   // 3人乗せる
    e.close();       // ドアを閉める

    e.move( 5 );     // 5階へ移動

    e.open();        // ドアを開ける
    e.takeIn( -2 );  // 2人降ろす
    e.close();       // ドアを閉める

    e.move( 7 );     // 7階へ移動

    e.open();        // ドアを開ける
    e.takeIn( -1 );  // 1人降りる
    e.close();       // ドアを閉める
  }
}

 ・実行結果は,次のようになる。

opening the door...
taking in 3 people...
closing the door...
moving to floor 5
opening the door...
taking in -2 people...
closing the door...
moving to floor 7
opening the door...
taking in -1 people...
closing the door...