Lecture on Programming I 7/4

Menu Menu


先週の復習

    Java の使い方
    Makefile の書き方


授業について

この授業は 7/13 まで。課題の提出は、電子メールで7月一杯までとします。それ以降は受け付けません。試験はありません。宿題あるいは授業のレポートのどちらかを一つも提出してない人に単位を出すことはありません。

Java は今日まで。来週は、Intel CPU のアセンブラをやります。これで、この授業は終りです。


英語のTutorial を読んでみよう

Java 1.1.1 tutorial 英語を怖がっているようでは、だめ。英語は量。

幸いなことにリファレンスには日本語版があります。しかし、もし日本語を使うならば、それは、必ず人の後を付いていくということになる。それでもいいのか?

Java 1.1.1 Reference


オブジェクトってなんだっけ?

データとメソッドの組。オブジェクトの状態はインスタンス変数に格納されます。

    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 用に書き直してみよう。

Turtle.java


class Graphics

Canvas に絵を書く AWT (Abstract Window Toolkit) のクラス。極めて単純な機能しかない。Beans に移行することが望ましいらしい。


Applet と Application

このTurtle は、Applet としてもアプリケーションとしても実行できます。

TurtleTest.java turtle.html 単独で動く例

Turtle.java


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 を作ってみる

Btree.java


Test プログラム

BtreeTest.java

try/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 error
	Incompatible 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 とします。


Shinji KONO / Mon Dec 16 16:46:16 2019