Top / Graphics / 2018 / ex05

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

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

  1. 右のリンク先のPDFファイルを閲覧し,手書きの部分を講義資料に書き写しなさい.資料(学内アクセス限定)
  2. 右のリンク先のクラスファイルをダウンロードしなさい HWSample.class
  3. 上記資料の G05Fugayo.java を実際に作って動作確認しなさい.ただし,ここでは HW クラスのかわりに HWSample クラスを使う.HWSample クラスは,HWクラスとクラス名が異なるのみで,同じAPI仕様をもち同じ動作をする.したがって,あちこちの HW のかわりに...

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

  1. 教科書 p.44-48 を読みなさい.
  2. 右のリンク先のPDFファイルを閲覧し,手書きの部分を講義資料に書き写しなさい.資料(学内アクセス限定)
  3. 教科書 p.46 の HTurtle.java を作成しなさい.
  4. それをコンパイルしなさい.エラーが出たら修正しなさい.ただし,
    $ java HTurtle
    と実行してもエラーになる(HTurtle.javaにはmainがないため)だけなので注意.
  5. 教科書 p.44 の HTurtle クラスのAPI仕様を見て理解しながら,p.45の T51.java を作成しなさい.
  6. それをコンパイルしなさい.エラーが出たら修正しなさい.
  7. 実行してみなさい.エラーが出たら修正しなさい.
    $ java T51

check

  • 次の文の空白部分には「Turtle」,「HTurtle」,「インスタンス」,「クラス」,「ほげ」のいずれかが入る. それぞれ何が入るか考えなさい(白字で正解が書いてある)

    T51.javaの変数 m は,6行目をみると分かるように HTurtle クラスのオブジェクトを指す変数である. 9行目や11行目では,mの指すオブジェクトに対して house や polygon という インスタンス メソッドを呼び出している.これらのメソッドは HTurtle クラスで定義されている. このクラスの定義は,ソースファイル HTurtle.java に書かれている.

    一方,10行目などでは,mの指すオブジェクトに対して up, lt, fd 等の Turtle クラスで定義された インスタンス メソッドが呼び出せている.これは,HTurtle クラスがTurtle クラスを拡張して定義されたたものだからである.

    また,8行目では,TurtleFrame クラスの インスタンス メソッド add に対して,HTurtle クラスのインスタンスを指す変数 m を渡している. しかし,この add メソッドは,本来は Turtle クラスのインスタンスを指す変数を引数にとるものである. このようなプログラムが動作するのも,Turtle クラスを拡張して HTurtle クラスを定義したからである.

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

次のことを順番にやりなさい.

  1. HTurtle.java をコピーして HHogeTurtle.java というソースファイルを作る.
  2. HHogeTurtle.java を次のように修正する
    • HHogeTurtle クラスが 第4回課題C の HogeTurtle クラスを拡張したものになるようにする.polygon および house メソッドはそのままでよい.
    • HogeTurtle は Turtle を拡張したものだった.HHogeTurtle はさらにその HogeTurtle を拡張したものとなる.
  3. T51.java をコピーして G05HHT.java というソースファイルを作る.
  4. G05HHT.java を次のように修正する
    • HTurtle のかわりに HHogeTurtle を使う
  5. G05HHT が T51 と同じ動作をすることを確認する.
  6. G05HHT.java をさらに修正し,実行結果が下図の通りになるようにする.ただし,HHogeTurtle クラスには引数ありのコンストラクタが定義されていない(詳しくは次回以降説明する).下図のような結果を得るためには,右下の方のかめインスタンスを表す変数を h として,次のように書けばよい.
            :
    HHogeTurtle h = new HHogeTurtle();  
    (フレームに載せ,やる気アップ)
    h.up();
    h.moveTo(295, 300);
    h.down();
    (やつを描く)
         :
    
G05HHT.png

課題S(omake) [edit]

数理情報学科の学力認定試験の問題に挑戦してみよう. 2012年2月に行われた2011年度試験の専門Iの問題IV. 次のようにして問題を閲覧できる.

  1. https://wiki.math.ryukoku.ac.jp/ から「学力認定試験」へ

    数理情報学科のwikiサイトのアクセス時に求められるユーザ名とパスワードは,全学統合認証のものと同じ. 学力認定試験の他にも定期試験の過去問,教員による授業自己点検報告書なども閲覧できる.

  2. 「大学院入試問題」(←学力認定試験の過去問もこちら) へ
  3. 「media:学力認定試験(2012.2).pdf」を開く

問(1)の「クラスメソッドbproblem() を書きなさい」とか,「Randクラスのクラスメソッドirand()…」みたいな指示になるべく沿ってソースを角煮は,↓に示すようなソースファイルを作るとよい.試験問題では,Randクラスが存在すると仮定して,そのソースは書く必要がないということだが,ここではそれもあわせて書く例にしてある.

// クラス BProblem の定義
class BProblem {

    // クラスメソッド bproblem の定義
    static int bproblem(int m) {
          :
	return n;
    }

    // mainメソッドの定義
    public static void main(String[] args) {

       ここでクラスメソッド bproblem を呼ぶには
       n = bproblem(10) または n = BProblem.bproblem(10) のように書けばよい

    }

}

// クラス Rand の定義
class Rand {

    // クラスメソッド irand の定義
    static int irand() {
	return (int)(365*Math.random());
    }
}

ここでは,一つのソースファイルで複数のクラスを定義する例を示している. class の前に public がついていないことに注意.このソースファイル自体の名前は, 二つのクラス名と無関係に適当な名前をつければよい(ここでは Birth.java とする). このとき,

$ javac Birth.java

とコンパイルすると,BProblem.class と Rand.class ができる.実行するには,実行したいmainメソッドを含むクラスの名前を指定すればよいので,

$ java BProblem

とする.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-05-19 (土) 15:49:48 (33d)