計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木) 履習にあたって プログラミングとは? プログラムの作成・コンパイル・実行 練習
履習にあたって Webページ参照
計算機プログラミング プログラム: 計算機が情報を処理する 手順を記述したもの 記述のレベル プログラム: 計算機が情報を処理する 手順を記述したもの 記述のレベル 低: 計算機のCPUが理解できる 単純な命令の羅列 高: 人間が理解しやすいように 抽象化されたもの
計算機が発明された当初は人間が直接、機械語プログラムを 作成していた 計算機プログラミング 2: xorl %eax,%eax EAXの値を0にせよ 3: xorl %edx,%edx EDXの値を0にせよ 4: addl %edx,%eax EAXの値をEDXだけ増やせ 5: incl %edx EDXの値を1増やせ 6: cmpl $99,%edx EDXの値と99を比較せよ 7: jle 4 EDXの方が小さかったら4へ行け 8: leave 退避していたEBPの値を戻せ プログラム: 計算機が情報をどのように 処理すべきかという手順を記述したもの 記述のレベル 低: 計算機のCPUが理解できる 単純な命令の羅列 高: 人間が理解しやすいように 抽象化されたもの 「機械語」という 計算機が発明された当初は人間が直接、機械語プログラムを 作成していた
計算機プログラミング プログラム: 計算機が情報をどのように 処理すべきかという手順を記述したもの 記述のレベル 2: xorl %eax,%eax EAXの値を0にせよ 3: xorl %edx,%edx EDXの値を0にせよ 4: addl %edx,%eax EAXの値をEDXだけ増やせ 5: incl %edx EDXの値を1増やせ 6: cmpl $99,%edx EDXの値と99を比較せよ 7: jle 4 EDXの方が小さかったら4へ行け 8: leave 退避していたEBPの値を戻せ 変換する; 「コンパイル」 という 「オブジェクトコード」 という プログラム: 計算機が情報をどのように 処理すべきかという手順を記述したもの 記述のレベル 低: 計算機のCPUが理解できる 単純な命令の羅列 高: 人間が理解しやすいように 抽象化されたもの 人間が書く。 「ソースプログラム」という int i=0; int sum=0; while (i<100) sum = sum + i; 「高級言語」という
Java言語 オブジェクト指向に基くプログラミング言語 ネットワーク機能 グラフィクス機能 色々な計算機で同じように動く 仮想機械 (virtual machine)方式 ...
仮想機械(virtual machine)方式 計算機の中に架空の計算機を作り、 その中でオブジェクトコードを実行する 架空の計算機 = 仮想機械 (これもプログラム) オブジェクト コード コンパイル ソースプログラム 携帯電話用 仮想機械 Wintel用 仮想機械
プログラムのコンパイルと実行 ライブラリプログラムのコピー コンパイル 実行
プログラミング言語の 3要素 基本的な値を表わす方法 (式・文) 値や操作を組み合わせて 複雑な値や操作を作る方法 値や操作を抽象化する方法 100(数値)・“a”(文字)・true(真偽値)・・ 値や操作を組み合わせて 複雑な値や操作を作る方法 2つの値を足す・ある条件が成り立つまで 繰り返す・・・ 値や操作を抽象化する方法 変数・手続・関数・オブジェクト・・・
Java言語 オブジェクト指向に基くプログラミング言語 ネットワーク機能 グラフィクス機能 仮想機械方式 値や操作を “もの” (オブジェクト)として抽象化 例(銀行の口座管理システム): 1口座の情報は文字・数値の集まり (口座番号・名前・残高・1回目の入金額・2回目の入金額・・・) オブジェクト指向: プログラム中で「口座」を“もの”として扱える ネットワーク機能 グラフィクス機能 仮想機械方式
プログラミング言語の 3要素 基本的な値を表わす方法 (式・文) 値や操作を組み合わせて 複雑な値や操作を作る方法 値や操作を抽象化する方法 100(数値)・“a”(文字)・true(真偽値)・・ 値や操作を組み合わせて 複雑な値や操作を作る方法 2つの値を足す・ある条件が成り立つまで 繰り返す・・・ 値や操作を抽象化する方法 変数・手続・関数・オブジェクト・・・
オブジェクトとプログラムの要素 抽象化 (= 詳細をとりあえず気にしなくてよいもの) プログラムの動作 記述のための要素 亀・ウィンドウ ― オブジェクトとして抽象化 亀の動作 ― メソッド呼出しとして抽象化 プログラムの動作 ウィンドウを作る 亀を作る 亀をウィンドウに表示する 亀を動かす 亀の向きを変える 記述のための要素 オブジェクトを作る オブジェクトを覚える オブジェクトのメソッドを呼び出す
プログラムの構造 /** 最初のプログラムの例 */ public class T21 { public static void main(String[] args){ TurtleFrame f; //変数 f の型宣言 f = new TurtleFrame(); //TurtleFrameを作成しfに代入 Turtle m = new Turtle(); //Turtle を作成し,m の初期値として代入 Turtle m1 = new Turtle(); //もう1つ作成し,m1 の初期値として代入 f.add(m); //f に m を追加 f.add(m1); //f に m1 を追加 m.fd(100); //m よ前に 100 進め m.rt(90); //m よ右に 90 度回れ m.fd(150); //m よ前に 150 進め m1.rt(90); //m1 よ右に 90 度回れ m1.fd(100); //m1 よ前に 150 進め }
プログラムの構造 クラス名 コメント(注釈): /* 何でも */ // 何でも(行末まで) コメント(注釈): /* 何でも */ /** 最初のプログラムの例 */ public class T21 { public static void main(String[] args){ TurtleFrame f; //変数 f の型宣言 f = new TurtleFrame(); //TurtleFrameを作成しfに代入 Turtle m = new Turtle(); //Turtle を作成し,m の初期値として代入 Turtle m1 = new Turtle(); //もう1つ作成し,m1 の初期値として代入 f.add(m); //f に m を追加 f.add(m1); //f に m1 を追加 m.fd(100); //m よ前に 100 進め m.rt(90); //m よ右に 90 度回れ m.fd(150); //m よ前に 150 進め m1.rt(90); //m1 よ右に 90 度回れ m1.fd(100); //m1 よ前に 150 進め } クラス名 コメント(注釈): /* 何でも */ // 何でも(行末まで) コメント(注釈): /* 何でも */ // 何でも(行末まで)
変数式: 変数に入っている値をとり出す変数名 /** 最初のプログラムの例 */ public class T21 { public static void main(String[] args){ TurtleFrame f; //変数 f の型宣言 f = new TurtleFrame(); //TurtleFrameを作成しfに代入 Turtle m = new Turtle(); //Turtle を作成し,m の初期値として代入 Turtle m1 = new Turtle(); //もう1つ作成し,m1 の初期値として代入 f.add(m); //f に m を追加 f.add(m1); //f に m1 を追加 m.fd(100); //m よ前に 100 進め m.rt(90); //m よ右に 90 度回れ m.fd(150); //m よ前に 150 進め m1.rt(90); //m1 よ右に 90 度回れ m1.fd(100); //m1 よ前に 150 進め } 変数: 値を覚える入れもの 変数の型: 覚えられる値の集合 例: 整数型・Turtle型・・・ 型宣言: 型名 変数名; 代入文: 変数に値を入れる指示 変数名 = 式; 型宣言 + 代入文: 型名 変数名 = 式; 変数式: 変数に入っている値をとり出す変数名
オブジェクト クラス ― オブジェクトの種類 コンストラクタ ― オブジェクトを作る new クラス名(引数式, ...); /** 最初のプログラムの例 */ public class T21 { public static void main(String[] args){ TurtleFrame f; //変数 f の型宣言 f = new TurtleFrame(); //TurtleFrameを作成しfに代入 Turtle m = new Turtle(); //Turtle を作成し,m の初期値として代入 Turtle m1 = new Turtle(); //もう1つ作成し,m1 の初期値として代入 f.add(m); //f に m を追加 f.add(m1); //f に m1 を追加 m.fd(100); //m よ前に 100 進め m.rt(90); //m よ右に 90 度回れ m.fd(150); //m よ前に 150 進め m1.rt(90); //m1 よ右に 90 度回れ m1.fd(100); //m1 よ前に 150 進め } クラス ― オブジェクトの種類 コンストラクタ ― オブジェクトを作る new クラス名(引数式, ...); メソッド呼び出し ― 操作の指示 オブジェクト式 . メソッド名(引数式,...);
式と値 式が計算されると値が求められる コンストラクタ → 作られたオブジェクト 数値式 → 数 変数式 → 変数にしまわれている値 /** 最初のプログラムの例 */ public class T21 { public static void main(String[] args){ TurtleFrame f; //変数 f の型宣言 f = new TurtleFrame(); //TurtleFrameを作成しfに代入 Turtle m = new Turtle(); //Turtle を作成し,m の初期値として代入 Turtle m1 = new Turtle(); //もう1つ作成し,m1 の初期値として代入 f.add(m); //f に m を追加 f.add(m1); //f に m1 を追加 m.fd(100); //m よ前に 100 進め m.rt(90); //m よ右に 90 度回れ m.fd(150); //m よ前に 150 進め m1.rt(90); //m1 よ右に 90 度回れ m1.fd(100); //m1 よ前に 150 進め } 式が計算されると値が求められる コンストラクタ → 作られたオブジェクト 数値式 → 数 変数式 → 変数にしまわれている値
要素の組み合わせ 要素は組み合わせることができる メソッド呼び出し: オブジェクト式 . メソッド名( 引数式, ... ); + /** 最初のプログラムの例 */ public class T21 { public static void main(String[] args){ TurtleFrame f; //変数 f の型宣言 f = new TurtleFrame(); //TurtleFrameを作成しfに代入 Turtle m = new Turtle(); //Turtle を作成し,m の初期値として代入 Turtle m1 = new Turtle(); //もう1つ作成し,m1 の初期値として代入 f.add(m); //f に m を追加 f.add(m1); //f に m1 を追加 m.fd(100); //m よ前に 100 進め m.rt(90); //m よ右に 90 度回れ m.fd(150); //m よ前に 150 進め m1.rt(90); //m1 よ右に 90 度回れ m1.fd(100); //m1 よ前に 150 進め } 要素は組み合わせることができる メソッド呼び出し: オブジェクト式 . メソッド名( 引数式, ... ); + コンストラクタ (=オブジェクト式): new クラス名(引数式,...) ↓ (new TurtleFrame()).add(new Turtle());
プログラムの編集 すでにあるプログラムをコピー エディタを使って編集 コンパイル 実行