Lecture on Programming I 7/4
Menu Menu
先週の復習
Java の使い方 Makefile の書き方
授業について
この授業は 7/13 まで。課題の提出は、電子メールで7月一杯までとします。それ以降は受け付けません。試験はありません。宿題あるいは授業のレポートのどちらかを一つも提出してない人に単位を出すことはありません。
Java は今日まで。来週は、Intel CPU のアセンブラをやります。これで、この授業は終りです。
英語のTutorial を読んでみよう
Java 1.1.1 tutorial 英語を怖がっているようでは、だめ。英語は量。幸いなことにリファレンスには日本語版があります。しかし、もし日本語を使うならば、それは、必ず人の後を付いていくということになる。それでもいいのか?
オブジェクトってなんだっけ?
データとメソッドの組。オブジェクトの状態はインスタンス変数に格納されます。
class Btree { public int value; public Btree right; public Btree left; }
Java のオブジェクトの作り方
Constructor を使います。
class Btree { public int value; public Btree right; public Btree left; public Btree (int v,Btree l, Btree r) { value = v; right = r; left = l; } }これを、
new Btree(0,t,null);というような形で使います。
Java API のクラスは、どれを使うかを自分で宣言する必要があります。そのために import というのがあります。* を使って全部呼んでも良いが、必要なものだけを使うほうが良いかも。
error command
コンパイラエラーをerror コマンドに通すことにより、エラーをソースファイルにいれてくれます。cut & paste でも良いが...
javac file.java |& errorのように使います。これは、パイプと呼ばれる機能です。& を付けると、エラーも一緒にパイプに通します。
ls | wcとするとディレクトリ中のファイルの数がわかります。
インスタンス変数とメソッド変数の違い
メソッド変数は、オブジェクトの状態ではないが、メソッドの中でのみ有効になります。
Turtle Graphics を作る
Turtle.pm を Java 用に書き直してみよう。class Graphics
Canvas に絵を書く AWT (Abstract Window Toolkit) のクラス。極めて単純な機能しかない。Beans に移行することが望ましいらしい。
Applet と Application
このTurtle は、Applet としてもアプリケーションとしても実行できます。TurtleTest.java turtle.html 単独で動く例
Compoments
アプリケーションでは、class Components を使っています。
継承
基本的なオブジェクトに、より詳しい機能を付ける時に使います。一種のパッチ。
オブジェクトが死ぬとき
誰からも参照されなくなったときにオブジェクトは死にます。finalize で明示的に殺すほうが早く死んでくれます。
Thread を作る
RunningOval.java RunningOval.htmlランダムな配列を作る
public static int [] random_array (int n) { int i,j; list = new int [n]; for(i=0;i<n;i++) list[i] = -1; for(i=0;i<n;i++) { j = (int)(java.lang.Math.random()*n); while (list[j] != -1) { j = (++j<n)?j:0; } list[j]=i; } return list; }
Btree を作ってみる
Test プログラム
BtreeTest.javatry/catch
public static void main (String args[]) { Btree t; int size; if (args.length==0) { System.out.print("Need an integer argument as size. \n"); return; } try { size = Integer.parseInt(args[0]); } catch (Exception e) { System.out.print("Need an integer argument as size. \n"); return; } if (size<=0) { System.out.print("An argument should be greater than 0. \n"); return; } ...入力のチェックが重要。
Breadth First Walk は、どうやって作れば良い?
Btree を使う
Vector を使う
Java は、あと、何を勉強すれば良いのか?
Enumeration の使い方
Interface
Inner Class
Breadth Walk Enumerator を作る
授業2回でわかるわけない。Java 言語 Java API
問題
Makefile の使い方
例題のMakefile で、make test4 が終ったあと、TurtleApp.java を編集した。この後、make test4 を実行すると make は何をするか? 順を追って説明せよ。Turtle Graphics を使う別なテストプログラムを作り、それをテストする部分を Makefile に付け加えてみよ。
Type error の確認と直し方
Java Compiler のtype errorIncompatible type for =. Can't convert int to Btree.というエラーメッセージを生成するプログラムの例を示せ。
Turtle Graphics
四角い渦を書くプログラム、二重の四角い渦を書くプログラム、曲線の渦を書くApplet を作成せよ。
Tutorial を読んで理解する
Java Tutorial のLearning the Java Languageの中の
Object-Oriented Programming Conceptsの中の
What Is Inheritance?を読んで、abstract class とは何かを説明せよ。
Object の作り方
走る車を表すオブジェクトを作ることを考えよう。ここでは、車の速度 v 車のハンドルの方向 directionを考えることにする。これらをオブジェクトの状態として持つclass Car を作成せよ。
これらの代わりに、
アクセスの位置 pedal エンジンの力 power 車の重さ weight 車の加速 accelarationなどを使うオブジェクトclass DetailedCar を作成せよ。
Runnable
例題RunningOval を参考にして、線を書く代わりに、自走する Car を作ってみよ。Applet を Runnable にして、Car に forward() のようなメッセージを送るようにすると良いかも知れない。
四角いコースを走るCar、丸いコースを走るCarのプログラムを作成せよ。
速度も時間で変化するように作ってみよう。
Manual の見方
三角形を描くために必要なclass とmethod のマニュアルを探す手順を記述せよ。
基本的な制御
class Car, class DetailedCar で、単位時間(1sec)あたりの車の位置を計算するメソッドを、これらのclass に付け加えたい。必要なインスタンス変数を付け加えて、このメソッドを完成しせよ。このクラスを使って、車の10秒間の動きをシミュレーションするプログラムを作成せよ。for, while, do-while の三種類のループを使う版を作成せよ。
継承の使い方
Detailed Car を Car を継承する形で作成してみよ。
String の使い方
Car に運転者の名前と、持ち主の名前という属性を付け加える。Car に、持ち主以外が運転すると文句を言う機能を付けてみよう。
文字と数字の変換
Applet のGraphics を使って、この車の運転手の名前、スピード、位置などを表示する方法を示せ。
try catch の使い方
制限速度を越えると Exception を投げるように Car を改造したい。制限速度を越えた場合はどのようにすべきか? Runnable の例題にその処理をtry/catch を使って付け加えよ。
時間を測る
class Date を使って、Btree の速度を計測し、Perl のversion と比較してみよ。* Perl のversion の実時間は、time で取れるのだが、秒までしか測定できない。なので、秒単位で測定できるだけの時間がかかるデータを用意する必要がある。
解の性質を調べる
random_array は、本当にランダムか? これをグラフィカルに表示する方法を考え実装せよ。また、ランダムでない場合は、その理由について考察し、その解決方法を示せ。
Vector の使い方
Vector には整数は格納できないらしい。それを示すエラーメッセージを出すプログラムを示せ。それを乗り越える方法にはどんな方法があるか。(ヒント class Integerを使う)
Enumerator の使い方
Btree を Breadth walk する Enumerator を作成せよ。
Btree のGraphicalな表示
Breadth first walk する時の、一段前のlevelを取っておくことにより、Btree を Applet 上で Graphical に示すプログラムを書け。Btree を Depth first の方法で、Graphical に表示する方法に付いても考察してみよ。(ヒント: 2パス (2 pass )という、木を二回渡り歩く方法を使うと良いかも知れない)
提出
以上の問題を
Subject: Practice on Programming I 7/6というサブジェクトで、18:30 までに、できるだけ、kono@ie.u-ryukyu.ac.jp までメールを出すこと。
宿題
残りは、
Subject: Report on Programming I 7/6というサブジェクトで、kono@ie.u-ryukyu.ac.jp までメールを出すこと。
必ず Makefile を付けること。
(*) がついている問題は option とします。