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