<授業の進め方について> ・今の状況だと授業中に教科書のプログラムを写経するだけで授業時間が過ぎてしまうのが自分の現状です。 ↓ 過去のコメントにもあるように,事前に準備しておくことを薦めるます. ・プログラミングに大変苦労しているが、どうにかなりそうである。 しかしながら、プログラミングに苦労している学生を切り捨てるのも いかんせん切ないものである。 互助の体制でも作った方がよいのだろうか? ↓ 学生間の交流は,自主的に行ってもらっても構いません.ただし,レポートは各自が責任をもって,作成してください. その辺りを曖昧にしていると,不正行為を疑われる可能性もあるので… <レポート> ・教科書に例題が載っているプログラムについては、プログラムリストは省略してもよいだろうか。 ↓ もちろん良い(と説明したつもりだったが…), ただし考察の際に行番号などを使いたいのであれば,プログラムリストがあった方が良いでしょう(ということもコメントしたと思います). <総評> 全般的に言って折角 CGCanvas を作っているのに,スクリーン座標系で考えている人が多いようです. CGCanvasを使うには,とにかくワールド座標系にすることが大事です. mousePressedされたときの座標値も,すぐにワールド座標系に変換して,ワールド座標系で作業すべきでしょう. <章末課題について> ・授業中に、前回の章末課題の模範 解答もしくは一般的手法を紹介してもらえると有難いと思った。そのプログラムをCFiveに上げるなどすると次年度以降 に問題になるであろうから、前のスクリーンに写してざっと説明する程度でも良いと思う。 ↓ プログラム例を示すと,そこで思考が止まってしまって考えなくなってしまう傾向が強いと感じている. また,課題には一定の目標はあるが,全員が同じプログラムでなくても良いと思う. したがって,現在は個別にヒントを与えるに留めている. <Toleranceについて> ・教科書における 1.0e-6 という値は、記述にもあるように通常生じうる丸め誤差を適当に見積もった結果で ある思われる。 ・実際どんな場面で必要になるのかとその場合に1.0e6がどの程度妥 当であるのかはよく分からない。 ↓ ここは double型であるが,途中の計算に float型が含まれる可能性があるので,概ねfloat型の精度を意識している. <Vector2D について> ・Vector2Dオブジェクトは、型修飾子finalがついている通り定数変数である。 ↓ 授業のときにも触れたが,int型の変数に代入される値はint型の定数であるように,Vector2D型の変数に代入される値(オブジェクト)も定数となるようにしている. ・(Vector2D.javaで)なぜわざわざ x を取り出すメソッドを用意しているのだろうか ↓ CGCanvasなどで利用している. <CGCanvas について> ・CGCanvasクラスがabstractとして抽象クラスになっている理由はよくわからなかった ↓ CGCanvas自体をインタンス化することはなく,必ず継承して用いることを想定しているため. ・drawPolygon としたらなぜ Graphics クラスの drawPolygon ではなく、 CGCanvas クラスの drawPolygon が呼び出されるの かわからない ↓ CGCanvas内で単に drawPolygon を読んでいるため.仮に Graphics オブジェクト g を手に入れて g.drawPolygon とすれば Graphicsクラスの drawPolygon が呼ばれる. <Javaのプログラミングについて> ・なぜpublic static void main(String[] args)のString[] argsがないとならないか不明。 ↓ Javaのメソッドは,メソッド名だけでなく,引数や返り値の型を含めたシグネチャで区別されるため. ・CGCanvasクラスを継承したクラスを定義した際、親クラスであるCGCanvasクラス のコンストラクタを実行するときにsuper()でいけないのはなぜなのでしょうか。な ぜ括弧内に子クラスの名前を入れる必要があるのでしょうか。 ↓ CGCanvasのコンストラクタが文字列(String)を引数で取るようになっているため.この文字列はウィンドウ(Frame)のタイトルバーに現れる. ・ところで、コンストラクタが持つ引数は何を基準に決められているのだろうか? また、例え ばタイトルの引数を持つ必要性があるのだろうか? ↓ それはプログラムを書く人の設計思想に依存していて,絶対的な正解があるわけではない. プログラムごとにタイトルバーの文字列を書き換えたければ,new Frame する際に文字列を与える必要がある. メソッドの引数も同様であり,プログラムを書く人が決めること. ・以下のエラーで実行できなかった。 CGDrawOval.java:28: シンボルを見つけられません。 シンボル: メソッド drawCircle(java.awt.Graphics,Vector2D,int) 場所 : java.awt.Graphics の クラス g.drawCircle(g,point(startX-r,startY-r),r*2); ^ エラー 1 個 ↓ Javaのメソッドでは,シンボルというとメソッド名だけではなく, 引数や返り値の型も含んだシグネチャが一致しないと同一シンボルと見なされない. g.drawCircle(int, int, int, int)でないといけない ・他のクラスの名前(Vector2D)を用いて、pointsのタイプを指定できることに驚いた。(Vector2Dというタイプが元々存在するわけではなさそうなのでこう考えたのですが、この解釈はあってい ますか?) ↓ Javaのクラスは,すなわち型である.Canvas, Color, Graphics, MouseEventなども,すべてクラスであり,型として扱える. ・同じフォルダにあるからVector2Dも呼び出せるのだろ うが、さらに長い、10~20以上のファイルでできたプログラムでフォルダ分けする場合はどう呼び出すのだろうか? ↓ Javaの場合にはパッケージ=フォルダ=ディレクトリと考えて良い.ただ当面はカレントディレクトリにコピーしていれば良いであろう. ・メソッドにより返される行列はnewとしてあたらしく 作られなければならず、多くの行列を用いた場合、なかなかそれが破棄されずにデータを圧迫するのではないかと感じた。 ↓ Java仮想機械のGarbage Collectionが管理してくれる(はず). ・自分のMacでは全角のコメントが引っかかってコンパイルできなかったので、コメントを 全消去した。 ↓ 符号化方式(エンコーディング)の問題であろう.ファイルの符号化方式(エンコーディング)を変更するか,コンパイル時に -encoding オプションで符号化方式(エンコーディング)を指定すれば良かった. ・ちょっと疑問なのですが、CGCanvasファイルの中でこれ(注: java.awt.event.* など)をインポートしているのに どうしてそれの下位クラスでまたインポートしないといけないのでしょうか? ↓ (コンパイルする際に)プログラム内で利用されているクラスの所在を明確にしないといけない. 今回のプログラム中では,MouseAdapterやMouseEventなどのクラスを利用しているので,importは欠かせない