Presentation is loading. Please wait.

Presentation is loading. Please wait.

計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)

Similar presentations


Presentation on theme: "計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)"— Presentation transcript:

1 計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
返り値のあるメソッドとフィールド (2.7) クラス変数・クラスメソッド (3.3-4) 式と文 (3.1-2,7-8) プリミティブ値とオブジェクト値 (3.1-2) 演算子 (3.8) 練習問題

2 履習登録について (実例参照)

3 概念の整理 クラス: オブジェクトの性質を定義 (性質: 状態・振舞) オブジェクト: 「もの」を表わす値 (クラスに所属)
クラス: オブジェクトの性質を定義 (性質: 状態・振舞) オブジェクト: 「もの」を表わす値 (クラスに所属) 変数: 値の入れ物 (型がある) 型: 値の集合 (クラスも型) /** 最初のプログラムの例 */ 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 進め }

4 文法の整理 型宣言 コンストラクタ呼出し オブジェクトを作る 代入 変数に値を「しまう」 メソッド呼出し オブジェクトに 指示を出す
コンストラクタ呼出し オブジェクトを作る 代入 変数に値を「しまう」 メソッド呼出し オブジェクトに 指示を出す /** 最初のプログラムの例 */ 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 進め }

5 プログラム T22 (2.6) public class T22 {
public static void main(String[] args){ TurtleFrame f = new TurtleFrame(); int x = 200, y = 200, d = 100; Turtle m = new Turtle(x,y,180); //引数のあるコンストラクタ呼び出し Turtle m1 = new Turtle(x+ d,y+ d,0); java.awt.Color c = new java.awt.Color(255,0,0); //赤色オブジェクトを作成 m1.setColor(c); //m1 の色を赤色に指定 f.add(m); f.add(m1); m.fd(d); m1.fd(d); m.lt(90); m1.lt(90); d = d / 2; //d の値を d/2 に変更 }

6 整数型の変数の宣言 int x = 200; int y = 200; int d = 100; と同じ
public class T22 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(); int x = 200, y = 200, d = 100; Turtle m = new Turtle(x,y,180); //引数のあるコンストラクタ呼び出し Turtle m1 = new Turtle(x+ d,y+ d,0); java.awt.Color c = new java.awt.Color(255,0,0); //赤色オブジェクトを作成 m1.setColor(c); //m1 の色を赤色に指定 f.add(m); f.add(m1); m.fd(d); m1.fd(d); m.lt(90); m1.lt(90); d = d / 2; //d の値を d/2 に変更 } int x = 200; int y = 200; int d = 100; と同じ int x; //整数をしまう変数xを宣言 x = 200; //xに200をしまう と同じ

7 引数つきのコンストラクタ 意味: Turtleオブジェクトを作る (コンストラクタ呼出し)
public class T22 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(); int x = 200, y = 200, d = 100; Turtle m = new Turtle(x,y,180); //引数のあるコンストラクタ呼び出し Turtle m1 = new Turtle(x+ d,y+ d,0); java.awt.Color c = new java.awt.Color(255,0,0); //赤色オブジェクトを作成 m1.setColor(c); //m1 の色を赤色に指定 f.add(m); f.add(m1); m.fd(d); m1.fd(d); m.lt(90); m1.lt(90); d = d / 2; //d の値を d/2 に変更 } 意味: Turtleオブジェクトを作る (コンストラクタ呼出し) “x,y,180” ~ 引数: (この場合) 座標と向き コンストラクタ・メソッドに どんなものがあるか? どんな意味か? ― API new Turtle() と違う? ― オーバーロード

8 API (Application Programming Interface)
ライブラリの使い方の情報 クラスの名前・定義されているコンストラクタ・メソッド・フィールド・・・ Turtle ― 名前 () ― 引数なし → new Turtle() 引数が3つ全てint(整数)だった場合 メソッドの名前・型・働き

9 オーバーロード (多重定義) 複数のコンストラクタが 同じ名前で定義できる “new Turtle()”→引数0個
引数の個数と型で どれかが決まる メソッドも同様 “new Turtle()”→引数0個 “new Turtle(100,50,30)” → 3個のint(整数)型

10 パッケージ “java.awtパッケージの中にある Colorクラス” パッケージ: いくつかのクラスをまとめたもの
public class T22 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(); int x = 200, y = 200, d = 100; Turtle m = new Turtle(x,y,180); //引数のあるコンストラクタ呼び出し Turtle m1 = new Turtle(x+ d,y+ d,0); java.awt.Color c = new java.awt.Color(255,0,0); //赤色オブジェクトを作成 m1.setColor(c); //m1 の色を赤色に指定 f.add(m); f.add(m1); m.fd(d); m1.fd(d); m.lt(90); m1.lt(90); d = d / 2; //d の値を d/2 に変更 } パッケージ: いくつかのクラスをまとめたもの java.awt: Java言語標準ライブラリの abstract window toolkitパッケージ 名前が重ならない工夫 “java.awtパッケージの中にある Colorクラス”

11 式 数式だけが式ではない 演算子: +, -, *, /, %, &, |, ... 式: 値を表わす単位 数値は式 変数は式
public class T22 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(); int x = 200, y = 200, d = 100; Turtle m = new Turtle(x, y, 180); //引数のあるコンストラクタ呼び出し Turtle m1 = new Turtle(x+d, y+d, 0); java.awt.Color c = new java.awt.Color(255,0,0); //赤色オブジェクトを作成 m1.setColor(c); //m1 の色を赤色に指定 f.add(m); f.add(m1); m.fd(d); m1.fd(d); m.lt(90); m1.lt(90); d = d / 2; //d の値を d/2 に変更 } 演算子: +, -, *, /, %, &, |, ... 式: 値を表わす単位 数値は式 変数は式 “new クラス名(式, 式, ...)” は式 “式 + 式” は式 etc.

12 式の値 数値→ その値 変数→ そのときに入っている値 “new クラス名(式, 式, ...)” → 作られたオブジェクト
public class T22 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(); int x = 200, y = 200, d = 100; Turtle m = new Turtle(x, y, 180); //引数のあるコンストラクタ呼び出し Turtle m1 = new Turtle(x+d, y+d, 0); java.awt.Color c = new java.awt.Color(255,0,0); //赤色オブジェクトを作成 m1.setColor(c); //m1 の色を赤色に指定 f.add(m); f.add(m1); m.fd(d); m1.fd(d); m.lt(90); m1.lt(90); d = d / 2; //d の値を d/2 に変更 } 数値→ その値 変数→ そのときに入っている値 “new クラス名(式, 式, ...)” → 作られたオブジェクト “式 + 式”→ 1. 各式の値を求める 2. 値の和

13 代入と変数の値 変数式: その時点で 変数に入っている値 代入: 1. 右辺の値を求め 2. 変数に値を入れ直す dは100 dは50
public class T22 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(); int x = 200, y = 200, d = 100; Turtle m = new Turtle(x,y,180); //引数のあるコンストラクタ呼び出し Turtle m1 = new Turtle(x+ d,y+ d,0); java.awt.Color c = new java.awt.Color(255,0,0); //赤色オブジェクトを作成 m1.setColor(c); //m1 の色を赤色に指定 f.add(m); f.add(m1); m.fd(d); m1.fd(d); m.lt(90); m1.lt(90); d = d / 2; //d の値を d/2 に変更 } 変数式: その時点で 変数に入っている値 dは100 代入: 1. 右辺の値を求め 2. 変数に値を入れ直す dは50

14 変数と値の抽象化 何故変数を 使うのか? 変数: 同じ意図を持った値を 明示できる 値に名前を付ける これも 同じように 動く
public class T22 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(); int x = 200, y = 200, d = 100; Turtle m = new Turtle(x,y,180); //引数のあるコンストラクタ呼び出し Turtle m1 = new Turtle(x+ d,y+ d,0); java.awt.Color c = new java.awt.Color(255,0,0); //赤色オブジェクトを作成 m1.setColor(c); //m1 の色を赤色に指定 f.add(m); f.add(m1); m.fd(d); m1.fd(d); m.lt(90); m1.lt(90); d = d / 2; //d の値を d/2 に変更 } public class T22 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(); Turtle m = new Turtle(200,200,180); //引数のあるコンストラクタ呼び出し Turtle m1 = new Turtle(300,300,0); java.awt.Color c = new java.awt.Color(255,0,0); //赤色オブジェクトを作成 m1.setColor(c); //m1 の色を赤色に指定 f.add(m); f.add(m1); m.fd(100); m1.fd(100); m.lt(90); m1.lt(90); m.fd(50); m1.fd(50); } これも 同じように 動く 変数: 同じ意図を持った値を 明示できる 値に名前を付ける 全体を1.5倍の 大きさにするには? 左上を(50,50)に 変更するには?

15 変数と値の抽象化 より良い プログラム(?) 全体を1.5倍の 大きさにするには? 左上を(50,50)に 変更するには?
public class T22 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(); int 左上隅x = 200, 左上隅y = 200, 辺長 = 100; Turtle m = new Turtle(左上隅x,左上隅y,180); //引数のあるコンストラクタ呼び出し Turtle m1 = new Turtle(左上隅x+辺長,左上隅y+辺長,0); java.awt.Color c = new java.awt.Color(255,0,0); //赤色オブジェクトを作成 m1.setColor(c); //m1 の色を赤色に指定 f.add(m); f.add(m1); m.fd(辺長); m1.fd(辺長); m.lt(90); m1.lt(90); 辺長 = 辺長 / 2; //d の値を d/2 に変更 } より良い プログラム(?) 全体を1.5倍の 大きさにするには? 左上を(50,50)に 変更するには?

16 プログラム T23 (2.7) import java.awt.Color; public class T23 {
public static void main(String[] args){ int d = 100, x, y, a; TurtleFrame f = new TurtleFrame(); Turtle m = new Turtle(200,300,0); f.add(m); m.fd(d); x = m.getX() // m のX 座標とり出し y = m.getY(); // m のY 座標とり出し a = m.getAngle() - 45; // m の角度とり出し Turtle m1 = new Turtle(x, y, a); //m1 の作成 f.add(m1); m.kameColor = new Color(0,255,255); // m の亀の色を水色変える m.kameScale = m.kameScale * 2; // m の亀を現在の 2 倍の大きさにする m.rt(45); d = d / 2; m1.fd(d); }

17 パッケージ名の略記 import java.awt.Color; “ファイル中で java.awt.Color クラスを略記” 同じ
public class T23 { public static void main(String[] args){ int d = 100, x, y, a; TurtleFrame f = new TurtleFrame(); Turtle m = new Turtle(200,300,0); f.add(m); m.fd(d); x = m.getX() // m のX 座標とり出し y = m.getY(); // m のY 座標とり出し a = m.getAngle() - 45; // m の角度とり出し Turtle m1 = new Turtle(x, y, a); //m1 の作成 f.add(m1); m.kameColor = new Color(0,255,255); // m の亀の色を水色変える m.kameScale = m.kameScale * 2; // m の亀を現在の 2 倍の大きさにする m.rt(45); d = d / 2; m1.fd(d); } public class T23 { public static void main(String[] args){ .... f.add(m1); m.kameColor = new java.awt.Color(0,255,255); // m の亀の色を水色変える m.kameScale = m.kameScale * 2; // m の亀を現在の 2 倍の大きさにする ... } 同じ import java.awt.*; →java.awtパッケージ内の全てのクラスを略記

18 メソッドの返り値 メソッド 返り値の型 返り値は オブジェクトの動作 計算…値を返す ことができる (cf. 計算式) 「返り値」という
void: 値を返さない 返り値は 他の式と組み合せられる 無視してもよい

19 メソッドの返り値 メソッドの返り値を使っている 計算式の中で 使ってもよい
import java.awt.Color; public class T23 { public static void main(String[] args){ int d = 100, x, y, a; TurtleFrame f = new TurtleFrame(); Turtle m = new Turtle(200,300,0); f.add(m); m.fd(d); x = m.getX(); // m のX 座標とり出し y = m.getY(); // m のY 座標とり出し a = m.getAngle() - 45; // m の角度とり出し Turtle m1 = new Turtle(x, y, a); //m1 の作成 f.add(m1); m.kameColor = new Color(0,255,255); // m の亀の色を水色変える m.kameScale = m.kameScale * 2; // m の亀を現在の 2 倍の大きさにする m.rt(45); d = d / 2; m1.fd(d); } メソッドの返り値を使っている 計算式の中で 使ってもよい Turtle m1 = new Turtle(m.getX(), m.getY(), m.getAngle() - 45); と書いても同じ

20 フィールド (インスタンス変数) 個々のオブジェクトの 中にある変数 オブジェクトの状態 (の一部) 変数と同様に 型がある 代入できる
個々のオブジェクトの 中にある変数 オブジェクトの状態 (の一部) 変数と同様に 型がある 代入できる 式として書ける

21 フィールド (インスタンス変数) 代入して値を 変更できる 計算式の中で 使ってもよい import java.awt.Color;
public class T23 { public static void main(String[] args){ int d = 100, x, y, a; TurtleFrame f = new TurtleFrame(); Turtle m = new Turtle(200,300,0); f.add(m); m.fd(d); x = m.getX(); // m のX 座標とり出し y = m.getY(); // m のY 座標とり出し a = m.getAngle() - 45; // m の角度とり出し Turtle m1 = new Turtle(x, y, a); //m1 の作成 f.add(m1); m.kameColor = new Color(0,255,255); // m の亀の色を水色変える m.kameScale = m.kameScale * 2; // m の亀を現在の 2 倍の大きさにする m.rt(45); d = d / 2; m1.fd(d); } 代入して値を 変更できる 計算式の中で 使ってもよい

22 オブジェクトとは? (2.8) オブジェクト: 「もの」を表わす値 (クラスに所属) クラス 内部に状態を持つ (インスタンス変数)
オブジェクト: 「もの」を表わす値 (クラスに所属) 内部に状態を持つ (インスタンス変数) メソッドが呼出されると 状態を変化させる 他のオブジェクトのメソッドを呼出す 値を返す クラス どんなインスタンス変数を持つか? どんなメソッドを持つか? x座標=230 y座標=170 色=水色オブジェクト

23 練習問題 (教科書または講義webページ参照)


Download ppt "計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)"

Similar presentations


Ads by Google