#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 とする.