#author("2019-04-30T14:35:17+09:00","default:takataka","takataka")
#author("2019-05-17T12:52:01+09:00","default:takataka","takataka")
*グラフィックス基礎及び実習 2019年度 第5回 [#e9701092]
 
#contents

&color(#ff0000){工事中}; 
//&color(#ff0000){工事中}; 

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

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

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

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


&color(white,blue){check};
- 次の文の空白部分には「Turtle」,「HTurtle」,「インスタンス」,「クラス」,「ほげ」のいずれかが入る.
それぞれ何が入るか考えなさい(白字で正解が書いてある)
>
T51.javaの変数 m は,6行目をみると分かるように &color(white){HTurtle}; クラスのオブジェクトを指す変数である.
9行目や11行目では,mの指すオブジェクトに対して house や polygon という &color(white){インスタンス}; メソッドを呼び出している.これらのメソッドは &color(white){HTurtle}; クラスで定義されている.
このクラスの定義は,ソースファイル &color(white){HTurtle};.java に書かれている.
<
>
一方,10行目などでは,mの指すオブジェクトに対して up, lt, fd 等の &color(white){Turtle}; クラスで定義された  &color(white){インスタンス}; メソッドが呼び出せている.これは,&color(white){HTurtle}; クラスが&color(white){Turtle}; クラスを拡張して定義されたたものだからである.
<
>
また,8行目では,TurtleFrame クラスの &color(white){インスタンス}; メソッド add に対して,&color(white){HTurtle}; クラスのインスタンスを指す変数 m を渡している.
しかし,この add メソッドは,本来は &color(white){Turtle}; クラスのインスタンスを指す変数を引数にとるものである.
このようなプログラムが動作するのも,&color(white){Turtle}; クラスを拡張して &color(white){HTurtle}; クラスを定義したからである.
<



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

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

#ref(https://www-tlab.math.ryukoku.ac.jp/~takataka/course/Graphics/G05HHT.png,nolink)

**課題S(omake)  [#kadaiS]

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


+https://wiki.math.ryukoku.ac.jp/ から「学力認定試験」へ
>
数理情報学科のwikiサイトのアクセス時に求められるユーザ名とパスワードは,全学統合認証のものと同じ.
学力認定試験の他にも定期試験の過去問,教員による授業自己点検報告書なども閲覧できる.
<
+ 「大学院入試問題」(←学力認定試験の過去問もこちら) へ
+ 「media:学力認定試験(2012.2).pdf」を開く


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

#pre{{
// クラス 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