Top / Graphics / 2017 / ex08

グラフィックス基礎及び実習 2017年度 第8回 [edit]

課題A(self) 完成目標: 今回の実習終了まで [edit]

問1,2を全てやりなさい

問1 多重定義 [edit]

  1. 右のリンク先のPDFファイルを閲覧し,手書きの部分を講義資料に書き写しなさい.資料(学内アクセス限定)
  2. 前回の課題B で作成した HTurtle.java と T71.java を元にして,講義資料1/6の Q1 をやりなさい.

問2 クラスの拡張 [edit]

HTurtleクラスを拡張して新しいクラス MyTurtle を作ろう. MyTurtle クラスは,次の仕様のインスタンスメソッドをもつものとする.


★ MyTurtleクラスのAPI仕様

メソッド

void ppolygon(int n, int m, int s)
現在のかめの位置と向きから,1辺の長さ s の n 角形の各辺の周りに m 角形を配置した図形を描く(教科書p.64参照).
void ppolygon(int x, int y, int n, int m, int s)
位置(x,y)まで線を引かずに移動して上を向く.そこで上記と同様の図形を描く.

次の手順で進めたらよい.

  1. MyTurtle.java を作ろう.ただし,メソッドを定義する際には,既存のものが使えるならばそれらを活用してなるべく楽をすること
    • check 3引数の ppolygon メソッドは,HTurtle クラスの polygon メソッドを呼び出すように書いたら楽ですね(教科書p.64参照).
    • check 5引数の ppolygon メソッドは,3引数の ppolygon メソッドを呼び出すように書いたら楽ですね.
  2. こちら から G08exA2.java をダウンロードし,実行して動作確認しよう.G08exA2.java のソースに書かれたコメントをよく読んで考えること.
    • check 「MyTurtle クラスには polygon メソッドの定義ないけど???」 MyTurtle クラスは HTurtle クラスのサブクラス だから,MyTurtle クラスはこのクラスのメソッドやインスタンス変数を 継承 している.そのため,MyTurtle クラスのインスタンスが HTurtle クラスで定義されたインスタンスメソッド polygon を使える.
    • check 「MyTurtle クラスには speedAll メソッドの定義ないけど???」 MyTurtle クラスは HTurtle クラスのサブクラスであり, HTurtle クラスは Turtle クラスのサブクラスである. だから,MyTurtle クラスは Turtle クラスのメソッドやインスタンス変数を 継承 している.そのため,MyTurtle クラスでクラスメソッド speedAll が使える.

課題B(self) 完成目標: 今回の実習終了まで [edit]

問1,2を全てやりなさい

問1 インスタンス変数の定義 [edit]

  1. 右のリンク先のPDFファイルを閲覧し,手書きの部分を講義資料に書き写しなさい.資料(学内アクセス限定)
  2. 講義資料 2/6, 3/6 に記された Stepper.java と T72.java を作って動作確認しなさい.

問2 アクセス制限 [edit]

アクセス制限について理解するために,上記の T72 をいじっていたずらしよう.

  1. Stepper クラスの インスタンス変数 n と size には public というアクセス修飾子がついている.ということは,T72 クラスから,これらの変数の値を参照(System.out.printlnするとか計算に使うとか)したり変更したりできるということである.T72.java の8行目と9行目の間に次の行を追加して,そのことを確認してみよう.
     if(i == 2) m1.size = 200;
  2. Stepper クラスのインスタンス変数 j には private というアクセス修飾子がついている.これによってどのようなアクセス制限がされるのか理解するために,上記で追加した行のかわりに次の行を追加してみよう.
    m1.j = 0;
    もしもこの代入ができちゃうなら,for 文を無限ループにすれば,m1 君は...かわいそうなことになりますね.

課題C(TA) 締め切り: 次回実習開始直後 [edit]

前回の講義で説明した HW クラスを実際に作ろう.ただし,今回はバージョン1として,次の指示にしたがうこと.

  • 前回講義資料のAPI仕様に示した機能のうちクラス変数/クラスメソッドにかかわる部分を除いたもの,すなわち,次のものを実現することにする.
    • 2つのコンストラクタ
    • 2つのインスタンスメソッド
    • 3つのインスタンス変数
  • データのカプセル化はまだ考慮しなくてよい.すなわち,インスタンス変数にアクセス修飾子をつけないか public にしておけばよい.また,他のクラス(G08exC)でその変数にアクセス(値を参照したり書き換えたり)して構わない.

次の二つのクラスを作成し,動作確認しなさい.

  1. HW クラス 下図の空白部分を埋めて完成させること
  2. G08exC クラス 下記をそのままコピー&ペーストしたらよい

HW4ex08-2016.png

コンストラクタの書き方に関する注意: コンストラクタの書き方については次回の講義で学ぶことなので,ここで簡単に説明しておきます.

  • 16行目は,このクラスのインスタンス変数 name に,String型の引数 n の値を代入しています.したがって,このクラスで名前を表すインスタンス変数は name という名前で宣言しておくべきですね.
  • あと二つインスタンス変数についても同様の代入を書けばこのコンストラクタのできあがりです.それらの名前はお好みでどうぞ.
public class G08exC{
    public static void main(String[] args){
	HW p1 = new HW();
	p1.print();
	double bmi = p1.calcBMI();
	System.out.println("BMIは" + bmi + "やで");

	HW p2 = new HW("ふがよ", 234.5, 50.0);
	p2.print();
	System.out.println("BMIは " + p2.calcBMI() + " やで");

        p2.weight = 120.0;
	p2.print();
	System.out.println("BMIは " + p2.calcBMI() + " やで");
    }
}

課題S(おまけ) [edit]

次の三つをやりなさい(DrawGraph). mainメソッド(DrawGraph.javaに書いたらよい)は自分で適当なものを書くこと.

教科書p.75の練習問題7.10,7.11,7.12


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-05-29 (月) 22:23:41 (177d)