コンピュータ基礎および演習II

演習問題

解答は

に提出しなさい。クラスファイル (〜.class) は提出しなくてよい。 提出には gFTP 等の ftp ソフトを用いること。

問題1

以下のやり方はプログラムの設計方法として正しいか否かを判断しなさい。 ○×で答え、その理由を述べること。 ファイル名は Q1.txt とする。

  1. 大学には必ず学部があるので、学部クラスを継承する形で大学クラスをつくった。
  2. 大学にも高校にも入試があり、出願手続きなどの手順は似通っている。そこで入試インタフェースを定義して、大学クラスと高校クラスの両方にそのインタフェースを実装した。
  3. HDD(ハードディスクドライブ)も光学ドライブもドライブという点では共通なので、まずドライブクラスをつくり、それをHDDクラスと光学ドライブクラスに継承させた。
  4. マンション建設においては鉄骨が重要なので、鉄骨クラスを継承する形でマンションクラスをつくった。

問題2

今日の例題では2次元の図形としてのインタフェースを表す Shape を定義し、 円と矩形のクラスを定義した。

同様の考え方に基づき、3次元の図形としてのインタフェース ThreeDShapeを定義しなさい。3次元の図形には次のような機能があるとする。

ThreeDShape のインタフェースを実装し、 少なくとも 2 種類の立体図形を表すクラスを作成しなさい。 さらに、クラス SolidFigures に main メソッドを作成し、 表面積や体積を求める様子を書きなさい。 (ファイル名 SolidFigures.java)

問題3

問題3-1

あなたはこの冬休み、念願の車の購入に踏み切ることにした。信号が青に変わった時に先頭で飛び出さなければ気が済まない性格なため、加速最優先で車選びをすることにした。

車は数多くの部品から成り立っているが、ここでは大雑把に、 車クラス Car、車体クラス Body、エンジンクラス Engine を定義することを考える。

車クラスを定義するために以下の2通りが考えられる。

  1. 車は、エンジンによって動力を得るという性質と、車体によって移動するという性質があると考え、エンジンクラスと車体クラスを継承し車クラスを定義する。
  2. 車は、エンジンと車体から構成されていると考え、 車クラスの属性にエンジンと車体を持つように、車クラスを定義する。

どちらの方法が正しいか答えなさい。 また、その理由と、なぜもう一方の方法は間違っているのかについて考察しなさい。 ファイル名はQ3-1.txtとする。

問題3-2

車クラス Car、車体クラス Body、エンジンクラス Engine 、 それぞれのクラスには、重量を求めるメソッド getWeight() を実装すること。 車の重量は、エンジンの重量と車体の重量の和を計算することで求める。

また、クラス Car には、外部で生成した Engine オブジェクトを受け取り、 車にエンジンを搭載することができるメソッド setEngine(Engine) を作成しなさい。

車の加速のよさを判断する際に参考になる指標として、 パワーウエイトレシオ (Power-to-Weight Ratio; 車重/エンジンの出力) がある。 エンジンの出力が大きくても車体が重ければ加速は鈍くなる。 エンジンの出力 1 [kW] 当たりの車重が軽いほど、つまり、 パワーウエイトレシオの値が小さいほど加速がよいと判断できる。

クラス Engine に出力を返すメソッド getPower() を実装し、 クラス Car には、エンジンの出力と車重から、 パワーウエイトレシオを計算するメソッド getPowerToWeightRatio() を実装しなさい。

以下のように、エンジンを交換する様子を表わせるようにすること。

class Driver {
    public static void main(String[] args) {
        Engine engine1 = new Engine( 80, 300);  //  80[kW], 300[kg]
        Engine engine2 = new Engine(100, 400);  // 100[kW], 400[kg]
        Car car = new Car(1000);                // 1000[kg] (body)
	car.setEngine(engine1);
	System.out.println(
	    "エンジン1搭載時のパワーウエイトレシオ: " + car.getPowerToWeightRatio());
	car.setEngine(engine2);
	System.out.println(
	    "エンジン2搭載時のパワーウエイトレシオ: " + car.getPowerToWeightRatio());
}

この問題の提出ファイルのファイル名は Driver.java とする。