ソフトウェア演習Ⅱ〔課題 4:抽象クラスによる継承〕担当:青野雅樹

ソフトウェア演習Ⅱ〔課題 4:抽象クラスによる継承〕担当:青野雅樹
以下の内容を満たす Java プログラムと、その実行結果(今回は特別で PostScript ファ
イル)を Moodle にアップせよ。締切は 11 月 4 日(火)の夜までとする。第 4 回の資料
を参考にして、以下の項目すべてに対応すること。
(1) Color クラスからなる Color.java を作成せよ。ここには、メンバー変数として private
変数の r, g, b(赤、緑、青の色の三原色)を実数値として保持する。値はいずれも、
[0.0,1.0]の間の値をとる。
たとえば、r=g=b=1.0 なら色は「白」
、
r=g=b=0.0 なら「黒」、
その他は、たとえば r=g=1.0, b=0.0 なら「黄色」などで、いわゆる光の三原色を表
すとする。public なメソッドとして、getR(), getG(), getB()で、それぞれ、赤色成
分、緑色線分、青色成分を double 型で取り出す関数を作れ。
(2) Shape2D クラスに Color クラス変数を private で持たせること。さらに、public
void setColor(Color c)というプロトタイプを持つ関数を用意し、Color 変数に値を
セットできる関数を用意せよ。同時に public Color getColor()というプロトタイプ
を持つ関数を用意し、Color 変数を返す関数を用意せよ。
(3) Circle クラスと Triangle クラスには、そのコンストラクタに Color クラスの変数を
加え、基底クラス(Shape2D)の Color 変数にコンストラクタ内で値をセットできる
ようにすること。同時に、psPrint メソッド内に、色を PostScript で書き出す命令
を一行追加すること。なお、Color 変数は基底クラスだけに保持させること。
(4) Rectangle クラスを新たに、Shape2D クラスの派生クラスとして追加せよ。メンバ
ー変数として、長方形の左下座標 v1 と右上座標 v2 を Coord2 変数で持たせること。
いずれも private 変数とし、する。これにも、
(3)で示した Color をコンストラク
タで設定できるようにし、psPrint メソッドも(3)と同様にせよ。その他は、Circle
や Triangle クラスと同内容とする。
(5) メインの ShapeInheritance.java には、Color に必要な赤、緑、青をランダムに発
生する部分と、
(4)の Rectangle クラスを加えること。図形の生成は、ループで、
3の倍数なら、三角形、3で割ったとき余りが1なら円、余りが2なら長方形とす
ること。その他は、プログラム 4-6 と同様とする。
(6) 実行にあたっては、乱数を 21~90 回の 3 の倍数回のループ数を与えること。
(7) PostScript のキャンバスは X 方向サイズを 600, Y 方向サイズを 800 とすること。
提出は、Coord2.java, Shape2D.java, Circle.java, Triangle.java, Rectangle.java, Color.java,
ShapeInheritance.java, ならびに出力の output.ps の合計 8 ファイルで、これらを Zip や
tar 等のアーカイブ形式でまとめて提出することを推奨する。
コメントとヒント:
あくまで例ですが、Color 変数がコンストラクタに含まれた場合のコンストラクタ例を
紹介します。
public Circle(double radius, Coord2 v, Color c){
this.radius = radius;/* 半径 */
this.v = v;/* 中心座標 */
super.setColor(c);/* 基底クラスの setColor メソッド */
}
のような感じで、定義できます。ポイントは、基底クラスの setColor メソッドを呼出
すとき、super という Java 特有の親クラス変数を示すキーワードを使用する点です。
色を与える PostScript コマンドは、"r g b setrgbcolor"(例: 0.31 0.75 0.10 setrgbcolor)
のようなコマンドで、この r, g, b の代わりに、String の format メソッドで%3.2f 程度
の 変 換 で 実 数 値 を 書 き 出 せ ば 結 構 で す 。 右 下 図 は n=21 で こ の 課 題 を 実 行 し た
PostScript を表示した例です。