解答は
- ホスト名: earth.mlab.im.dendai.ac.jp
- ディレクトリ: /home/submit/JavaBasic/[今日の日付]/[学籍番号]
に提出しなさい。クラスファイル (〜.class) は提出しなくてよい。 提出には gFTP 等の ftp ソフトを用いること。
「携帯電話」-「カメラ付き携帯」のような継承関係にある2つのクラスを、 身の周りから探しなさい。また、継承関係にあると判断した理由も答えなさい。
解答は文章でファイル Q1-1.txt に記述すること。
「学校」-「大学」-「私立大学」のような関係は、大学は学校としての性質を 受け継ぎ、私立大学は大学としての性質を受け継いでいることから、 3階層の継承関係と考えることができる。 身の周りから3階層にわたるクラスの継承関係を探しなさい。 また、そう判断した理由も答えなさい。
解答は文章でファイル Q1-2.txt に記述すること。
次のクラス定義は、 クラスを用いたプログラムの最初の回の演習問題 で作成した PETBottle である。
class PETBottle { private String name; private int volume; public void setName(String n) { name = n; } public String getName() { return name; } public void setVolume(int v) { volume = v; } public int getVolume() { return volume; } public void drunk(int drinked) { volume = volume - drinked; } }
このクラスを継承し ジュースの継ぎ足しができるペットボトルのクラス RefillablePETBottle を作成しなさい。 属性とメソッドの宣言において、 適切なアクセス修飾子 (public/protected/private) についても考えること。
RefillablePETBottle クラスには、 ジュースを追加する refill メソッドを作成し、 引数で与えられた量が追加されるようにする。
クラス RepeatDrinker に main メソッドを作成し、 RefillablePETBottle を用いて ジュースを飲んだり、継ぎ足したりする様子が表示されるようにしなさい。 (ファイル名: RepeatDrinker.java)
プログラムの大まかな構成は以下のとおりである。
public class RepeatDrinker { public static void main(String[] args) { // RefillablePETBottle を用い、ジュースを飲んだり、 // 継ぎ足したりする様子をプログラムとして表す } } class PETBottle { // PETBottle クラスの定義が書かれる } class RefillablePETBottle ...... // PETBottle クラスを継承した RefillablePETBottle の定義が書かれる }
「人」を表す Person クラスを考える。 人間といっても様々な人がいる、ということで次のような人間を考えてみる。
年齢を聞いたときの答えとして
という3種類の人間を考えよう。
このような人々をクラスで表現することを考える。 まずは、共通部分をまとめた基底クラス Person を定義する。
class Person { protected String name; protected int age; public Person() { } public Person(String n, int a) { name = n; age = a; } public String getName() { return name; } public int getAge() { return 0; } }
上のように、年齢を求める getAge メソッドは、とりあえず意味のない値 (0) を返すことにしておく。
このクラス Person を継承し、 正直な年齢を答えるクラス HonestPerson と、 大体の年齢を答えるクラス VaguePerson と、 さばを読んだ年齢を答えるクラス Liar を作成しなさい。 継承を行った各サブクラスで getAge メソッドをオーバライドし、 年齢を答えるように作る。
大体の年齢とは 10 歳単位で四捨五入した歳とする。 int 型での計算であれば次の式で求めることができる。
((age + 5) / 10) * 10
さばを読んだ年齢とは、年齢に応じてさばを読み度合を変化させるものとし、 20歳未満であれば実年齢、 20歳以上30歳未満であれば「実年齢-1」、 30歳以上40歳未満であれば「実年齢-2」、 40歳以上50歳未満であれば「実年齢-3」、 50歳以上であれば「実年齢-4」を答えるものとする。
クラス VariousPeople に main メソッドと 各自の自己紹介をする introduce メソッドを作成し、 正直な人、いい加減な人、さばを読む人のそれぞれに自己紹介をしてもらう。 (ファイル名 VariousPeople.java)
プログラムの大まかな構成および main メソッドの例は以下のとおりである。
public class VariousPeople { public static void main(String[] args) { HonestPerson maurice = new HonestPerson("Maurice White", 24); VaguePerson philip = new VaguePerson("Philip Bailey", 32); Liar jonny = new Liar("Jonny Graham", 45); introduce(maurice); introduce(philip); introduce(jonny); } private static void introduce(Person p) { System.out.println("Hello, my name is " + p.getName()); System.out.println("I'm " + p.getAge() + " years old."); System.out.println(); } } // 基底クラス Person class Person { protected string name; protected int age; public Person() { } public Person(String n, int a) { name = n; age = a; } public String getName() { return name; } public int getAge() { return 0; } } // 正直な年齢を答える人 class HonestPerson ..... // コンストラクタは継承されないので定義する public HonestPerson(String n, int a) { ..... // (super を使うと良い) } // getAge メソッドをオーバライド public int getAge() { .... } } // あいまいな年齢を答える人 class VaguePerson ..... ..... // さばを読んだ年齢を答える人 class Liar .... ....
CDとDVD Videoについて考えよう。 CDには音楽作品(Music)が複数記録されており、 DVD Videoには映像作品(Movie)が複数記録されている。
ここで、音楽作品と映像作品の性質を考えると、 どちらも作者(演奏家)と題名を持つ似たような性質のものだと考えられる。 そこで、まず音楽作品と映像作品に共通する性質を抽出し スーパクラスとして「コンテンツ(Content)」を定義し、 コンテンツを継承することで「音楽」と 「映像」のクラスを定義することが考えられる。 ただし、映像作品には、言語音声の種類や字幕、 視聴可能なリージョン(国や地域)などの情報が含まれているとする。
以上のような考え方に基づき、 コンテンツ (クラス Content)、 音楽 (クラス Music)、 映像 (クラス Movie) を作成しなさい。
ファイル名は VariousMedia.java とし、適当な main メソッドを書くこと。
上で定義したコンテンツが複数記録できるディスク (クラス Disc) を作成し、 この Disc クラスを継承する形で CD (クラス CompactDisc) 、DVD Video (クラス DVDVideo) を作成しなさい。
ファイル名は CDAndDVD.java とし、適当な main メソッドを書くこと。
上で定義した DVD Video が視聴できる DVD プレーヤを表すクラス DVDPlayer を定義しなさい。 DVD プレーヤでは DVD Video の再生だけではなく CD も演奏可能なものとすること。
視聴や演奏をすると言っても、 実際に本物の動画や音楽を再生するわけではなく、 "Now playing: 題名 (作者)" のように、 再生の様子を表示することにする。
ファイル名は DVDWatcher.java とする。 適当な映像作品を題材とした DVD Video および、 適当な音楽作品を題材とした CD を作成し、 再生できる様子を main メソッドに書くこと。