スライド

計算機プログラミング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