Javaプログラミング基礎

演習問題 (初級〜中級)

解答は

に提出しなさい。ソースファイル (〜.java) のみを提出。 提出は gFTP 等の ftp ソフトを用いて行う。

問題1

次の「A - B」は以下のいずれの関係であるか正しいものを選び、その理由を述べなさい。 ファイル名は Q1.txt とする。

a) A:「政治家」 - B:「安倍晋三」

  1. BはAのサブクラス
  2. BはAの属性(has-aの関係)
  3. BはAのインスタンス
  4. その他

b) A:「リンゴ」 - B:「青リンゴ」

  1. BはAのサブクラス
  2. BはAの属性(has-aの関係)
  3. BはAのインスタンス
  4. その他

c) A:「ハードディスクドライブ」 - B:「磁気ヘッド」

  1. BはAのサブクラス
  2. BはAの属性(has-aの関係)
  3. BはAのインスタンス
  4. その他

d) A:「野球」 - B:「テレビ放映」

  1. BはAのサブクラス
  2. BはAの属性(has-aの関係)
  3. BはAのインスタンス
  4. その他

問題2

クラスAをクラスBが継承し、クラスBをクラスCが継承している関係「A - B - C」の例を1つ挙げなさい。 ファイル名は Q2.txt とする。

問題3

次の各項目について、正しいか間違っているかを○×で判定しなさい。 間違っていると判定した場合には、どこがおかしいかを文章で説明しなさい。 ファイル名は Q3.txt とする。

a) private なメソッドはクラス外部から呼び出すことができない。 外部からオブジェクトに対して操作をする方法としては、 そのオブジェクトの public なメソッドを呼び出すのが一般的である。

b) オブジェクトの状態は属性の値で表現される。 属性は private とするのが原則であるが、 オブジェクトの状態を外部から変化させる必要がある場合には public にしなければならない。

c) private な属性にアクセスすることができるのは、private なメソッドに限定される。 これはオブジェクト指向プログラミングにおける重要な概念である「カプセル化」の一例である。

問題4

猿でも操作できる簡単なテレビ(受像機)を表すクラス TVSet を定義しなさい。 このテレビはボタンが以下の3つしかない。

これらのボタンを public なメソッドとして用意すること。

動作の条件は以下の通り。

現在のチャンネルを表示する private なメソッド showChannel を用意し、 チャンネル番号を表示する必要があるときには呼び出すようにすること。

ファイル名は TVWatcher.java とする。main メソッドは以下のようになる。

class TVWatcher {
    public static void main(String[] args) {
        TVSet tv = new TVSet(12);
        tv.power();
        tv.channelUp();
        tv.channelDown();
        tv.channelDown();
        tv.power();
    }
}

class TVSet {

   ...

}

実行すると以下のように表示される。

% java TVWatcher
Current channel: 1
Current channel: 2
Current channel: 1
Current channel: 12
%

問題5

カメラつき携帯電話を表すクラス MobilePhoneWithCamera を定義しなさい。 携帯電話を表すクラス MobilePhone と、カメラを表すクラス Camera をそれぞれ定義し、 MobilePhoneWithCamera クラスの定義に用いること。

それぞれのクラスで、以下のメソッドが使えるように定義すること。

なお、電話番号は文字列として扱うこととし、メソッド call の処理は電話番号を表示することとする。 また、メソッド shot の処理は「撮影しました」と表示することとする。 例によって、電源が入っていない場合には動作しないようにすること。

プログラム名は MobilePhonePhotographer とする。 mainメソッドの例は以下の通り。

class MobilePhonePhotographer {
    public static void main(String[] args) {
        MobilePhoneWithCamera phone = new MobilePhoneWithCamera();
        phone.power();
        phone.call("117");
        phone.shot();
        phone.power();
        phone.shot();
    }
}

...

% java MobilePhonePhotographer
117 に電話します。
撮影しました。
%