第6回 課題
●自分で好きな対象を決め,その概念を表記するクラスを定義せよ。その際,次のような
条件を満たすこと。
- クラスは,「物」を表す名詞単語であること
(例:Car, Cat, Dog など。Running, Walking, Work などの動詞やGood, Quicklyなどの形容詞・副詞であってはいけない)
- クラス名の頭文字は大文字にすること
(例:elevatorではなく,Elevatorとする)
- メンバ名の頭文字は小文字にすること
(例:Open()ではなく,open()とする)
- 適切なフィールド(データメンバ)2個以上
- 適切なメソッド2個以上
- 適切なコンストラクタ1個以上 (すべてのフィールドを初期化すること)
- main()メソッドをつけて,その中でそのクラスのオブジェクトを生成し,各メソッドを呼び出す。
- 今回作ったファイルは消さずに取っておくこと。(次回以降の課題に使う可能性がある)
実際にコンパイルして実行できるようにすること。完成したソースプログラムを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...
|
|
|
|
|
|