Java 6 を使って作りなさい。
レポート締切日: 2008年12月4日20:00
提出先: レポートボックス
お金を換算する抽象クラス Money、お金の集まりのクラス MoneyCollection、 日本円のクラス Yen が 別ページ のようになっているとする。 この時、以下の小問に答えなさい。
なお、この問題は早々に 2ch に投稿され、既に解答も寄せられています。 同じ掲示板に何度も同じ問題を投稿するのはマナー違反ですので、もう新たに この問題を投稿しないようにして下さい。
クラス Dollar が以下の機能を実現しているとする。
上記の条件を満たすクラスと Money, Yen, MoneyCollection の各クラ スと下記のテストクラス Test1 を結合し、実行したとき、 実行結果がどのようになるか予想し、根拠を挙げて説明しなさい。
class Test1{
public static void main(String[] arg){
Dollar.setYenRate(98.0);
Dollar d1 = new Dollar(1);
System.out.println(d1);
System.out.println(d1.getValue());
MoneyCollection mc = new MoneyCollection();
mc.add(d1);
mc.add(new Yen(100));
mc.add(new Dollar(2));
mc.show();
}
}
クラス Dollar を作成し、上記のテストを行い、実行結果を検証しなさい。
class Test2{
public static void main(String[] arg){
Dollar.setYenRate(98.0);
MoneyCollection mc = new MoneyCollection();
mc.add(new Dollar(1));
mc.add(new Yen(100));
mc.add(new Dollar(2));
Yen y = mc.total();
System.out.println(y);
}
}
class Test3{
public static void main(String[] arg){
Dollar.setYenRate(98.0);
MoneyCollection mc = new MoneyCollection();
mc.add(new Dollar(2));
mc.add(new Yen(200));
mc.add(new Dollar(1));
mc.add(new Yen(100));
mc.show();
System.out.println("---------------");
java.util.Collections.sort(mc);
mc.show();
}
}
昭和40年の日本の貨幣価値は現在の 10 倍だったそうです。 つまり「昭和40年の1円は現在の10円」となります。 そこで、昭和40年の日本円を表すクラスを Akagi とします。 またこの表示を行う kansan メソッドを用意します。 これをテンプレートメソッドを使用して実装しなさい。 そして、次のテストプログラムと結合して、以下の出力が出るようにしなさ い。
class Test4{
public static void main(String[] arg){
Dollar.setYenRate(98.0);
MoneyCollection mc = new MoneyCollection();
mc.add(new Yen(100));
mc.add(new Dollar(100));
mc.add(new Akagi(100));
for(Money m : mc){
m.kansan();
}
}
}
100.0円は100.0円 $100.0は9800.0円 昭和40年の100.0円は現在の1000.0円
なお、現在の日本円に関しては「100.0円は100.0円」と出力せずに 「100.0円」のみを出力するようにできればなおよい(加点の対象)。
今回はポリモーフィズム関連のレポートです。ポリモーフィズムという言葉を 使用してください。 また、テンプレートメソッドでのメソッドの呼び出しの仕組などは詳しく説明 してください。
またプログラムの説明で困っている人は、次のようにしてください。 例えば、Money Yen = new Yen(5); System.out.println(yen); でなぜ 5円が表示されるかなど、実際の呼出し時 にどのような動作をするかを中心に説明してください。
java.util.AbstractSequentialList クラスを利用して、線形リストを実装す ることを考える。 とりあえず、コンパイルエラーが出ないように実装したプログラムとテストプ ログラムを 別ページに用意した。 この時、以下の小問に答えなさい。
TDUList 内に size() を実装しなさい。
TDUListIterator 内に add() を実装しなさい。 そして、テスト1を動かすとどのように動作するか予想し、実際の動作と比較し なさい。 また、このテスト1 において、各メソッドがどのように呼び出されているか示 しなさい。
add のプログラムの説明では、 def が追加されるとき、ghi が追加されるとき、jkl が追加されるときの線形 リストの様子をそれぞれ図示しなさい。
TDUListIterator 内の next(), hasNext(), nextIndex() を実装しなさい。
また、テスト1を動かすとどのように動作するか予想し、実際の動作と比較し
なさい。
TDUListIterator 内の set() を次の手順で実装しなさい。 また、テスト2を動かすとどのように動作するか予想し、実際の動作と比較し なさい。
TDUList があらゆるオブジェクトを扱えるように Generics を使用して書き換 えなさい。 そして、テスト3を動かして、動作を確認しなさい。
課題 2-2 の説明がレポート作成上もっとも重要です。 作成したプログラムの動作原理を図を使って説明するのも重要ですが、 Test1.java において、 tdu.add("def") や、 tdu.listIterator() など、実 装していないメソッドが、どのような仕組みでエラーにもならずに動作するの かを説明する必要もあります。
冬休み中にやりとり可能なメールアドレスを記入すること。PDF ファイルを受 信できること
なお、写したと思われるほど酷似したレポートが複数提出された場合、原著が どれかの調査を行わず、抽選で一通のレポートのみを評価 の対象とし、他は提出済みの不合格レポートとして再提出は課しません。 自分で意図せずに他人にコピーされてしまった場合も同様ですので、レポート の取り扱いについては十分に注意して下さい。