計算機プログラミング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) • 練習問題 1 履習登録について (実例参照) 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 進め値の集合 } (クラスも型) } 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); m1.rt(90); m1.fd(100); //m よ前に 150 進め //m1 よ右に 90 度回れ //m1 よ前に 150 進め 4 プログラム 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 に変更 m.fd(d); m1.fd(d); } } 5 整数型の変数の宣言 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 の色を赤色に指定 int x = 200; f.add(m); int y = 200; f.add(m1); m.fd(d); int d = 100; m1.fd(d); m.lt(90); と同じ m1.lt(90); int x; //整数をしまう変数xを宣言 d = d / 2; //d の値を d/2 に変更 x = 200; //xに200をしまう m.fd(d); m1.fd(d); と同じ } 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 の色を赤色に指定 意味: Turtleオブジェクトを作る f.add(m); f.add(m1); (コンストラクタ呼出し) m.fd(d); “x,y,180” ~ 引数: (この場合) 座標と向き m1.fd(d); m.lt(90); • コンストラクタ・メソッドに m1.lt(90); どんなものがあるか? d = d / 2; //d の値を d/2 に変更 m.fd(d); どんな意味か? ― API m1.fd(d); • new Turtle() と違う? ― オーバーロード } 7 API (Application Programming Interface) ライブラリの使い方の情報 クラスの名前・定義されている コンストラクタ・メソッド・フィー ルド・・・ • Turtle ― 名前 () ― 引数なし → new Turtle() • 引数が3つ全てint(整数) だった場合 • メソッドの名前・型・働き 10 オーバーロード (多重定義) • 複数のコンストラクタが 同じ名前で定義できる – 引数の個数と型で どれかが決まる – メソッドも同様 • “new Turtle()”→引数0個 • “new Turtle(100,50,30)” → 3 個のint(整数)型 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クラス” //引数のあるコンストラクタ呼び出し java.awt.Color c = new java.awt.Color(255,0,0); } m1.setColor(c); f.add(m); f.add(m1); • m.fd(d); m1.fd(d); • m.lt(90); m1.lt(90); d = d / 2; • m.fd(d); m1.fd(d); } //赤色オブジェクトを作成 //m1 の色を赤色に指定 パッケージ: いくつかのクラスをまとめたもの java.awt: Java言語標準ライブラリの abstract window toolkitパッケージ 名前が重ならない工夫//d の値を d/2 に変更 12 式 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); f.add(m); f.add(m1); m.fd(d); m1.fd(d); m.lt(90); m1.lt(90); d = d / 2; m.fd(d); m1.fd(d); } //m1 の色を赤色に指定 式: 値を表わす単位 • 数値は式 • 変数は式 • “new クラス名(式, //d 式, の値を ...)” は式 d/2 に変更 • “式 + 式” は式 • etc. 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); f.add(m); f.add(m1); m.fd(d); m1.fd(d); m.lt(90); m1.lt(90); d = d / 2; m.fd(d); m1.fd(d); } //m1 の色を赤色に指定 • 数値→ その値 • 変数→ そのときに入っている値 • “new クラス名(式, 式, ...)” → 作られたオブジェクト //d の値を d/2 に変更 • “式 + 式”→ 1. 各式の値を求める 2. 値の和 15 代入と変数の値 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); 1. 右辺の値を求め f.add(m1); 2. 変数に値を入れ直す m.fd(d); m1.fd(d); dは100 m.lt(90); m1.lt(90); d = d / 2; //d の値を d/2 に変更 m.fd(d); m1.fd(d); dは50 } } 16 変数と値の抽象化 public class T22 { public static void main(String[] args){ TurtleFrame f = new TurtleFrame(); } 何故変数を 使うのか? public class T22 { int x = 200, y = 200, d = 100; public static void main(String[] args){ TurtleFrame f = new TurtleFrame(); Turtle m = new Turtle(x,y,180); //引数のあるコンストラクタ呼び出し Turtle m = new Turtle(200,200,180); 変数: Turtle m1 = new Turtle(x+ d,y+ d,0); java.awt.Color c = new java.awt.Color(255,0,0); Turtle //赤色オブジェクトを作成 m1 = new Turtle(300,300,0); • 同じ意図を持った値を m1.setColor(c); //m1 の色を赤色に指定 java.awt.Color c = new java.awt.Color(255 f.add(m); m1.setColor(c); 明示できる f.add(m1); f.add(m); m.fd(d); •f.add(m1); 値に名前を付ける m1.fd(d); これも m.fd(100); m.lt(90); 同じように m1.fd(100); m1.lt(90); m.lt(90); d = d / 2; • 全体を1.5倍の //d の値を d/2 に変更 動く m1.lt(90); 大きさにするには? m.fd(d); m.fd(50); m1.fd(d); • 左上を(50,50)に } m1.fd(50); 変更するには? } } 17 変数と値の抽象化 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); • /全体を1.5倍の 辺長 = 辺長 2; //d の値を d/2 に変更 } m.fd(辺長); m1.fd(辺長); • } 大きさにするには? 左上を(50,50)に 変更するには? 18 プログラム 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() y = m.getY(); a = m.getAngle() - 45; Turtle m1 = new Turtle(x, y, a); f.add(m1); m.kameColor = new Color(0,255,255); m.kameScale = m.kameScale * 2; m.rt(45); d = d / 2; m.fd(d); m1.fd(d); } } // m のX 座標とり出し // m のY 座標とり出し // m の角度とり出し //m1 の作成 // m の亀の色を水色変える // m の亀を現在の 2 倍の大きさにする 19 パッケージ名の略記 import java.awt.Color; public class T23 { public static void main(String[] args){ public class T23 { .... public static void main(String[] args){ f.add(m1); int d = 100, x, y, a; TurtleFrame f = new TurtleFrame(); m.kameColor = new java.awt.Color(0,255,255); Turtle m = new Turtle(200,300,0); m.kameScale = m.kameScale * 2; // m の “ファイル中で f.add(m); ... m.fd(d); java.awt.Color } 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; m.fd(d); import java.awt.*; m1.fd(d); →java.awtパッケージ内の全てのクラスを略記 } 20 } メソッドの返り値 • メソッド – オブジェクトの動作 – 計算…値を返す ことができる (cf. 計算式) 「返り値」という • 返り値の型 – void: 値を返さない • 返り値は – 他の式と組み合せられる – 無視してもよい 22 メソッドの返り値 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(); y = m.getY(); } a = m.getAngle() - 45; Turtle m1 = new Turtle(x, y, a); f.add(m1); m.kameColor = new Color(0,255,255); m.kameScale = m.kameScale * 2; m.rt(45); d Turtle = d / 2; m1 = new Turtle(m.getX(), m.fd(d); と書いても同じ m1.fd(d); } メソッドの返り値 を使っている 計算式の中で 使ってもよい // m のX 座標とり出し // m のY 座標とり出し // m の角度とり出し //m1 の作成 // m の亀の色を水色変える // m の亀を現在の 2 倍の大きさにする m.getY(), m.getAngle() - 45); 23 フィールド (インスタンス変数) • 個々のオブジェクトの 中にある変数 オブジェクトの状態 (の一部) • 変数と同様に – 型がある – 代入できる – 式として書ける 24 フィールド (インスタンス変数) 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(); y = m.getY(); a = m.getAngle() - 45; Turtle m1 = new Turtle(x, y, a); f.add(m1); m.kameColor = new Color(0,255,255); m.kameScale = m.kameScale * 2; } m.rt(45); d = d / 2; m.fd(d); m1.fd(d); } 代入して値を 変更できる // m のX 座標とり出し // m のY 座標とり出し // m の角度とり出し //m1 の作成 // m の亀の色を水色変える // m の亀を現在の 2 倍の大きさにする 計算式の中で 使ってもよい 25 オブジェクトとは? (2.8) • オブジェクト: 「もの」を表わす値 (クラスに所属) – 内部に状態を持つ (インスタンス変数) – メソッドが呼出されると • 状態を変化させる • 他のオブジェクトのメソッドを呼出す • 値を返す • クラス – どんなインスタンス変数を持つか? – どんなメソッドを持つか? x座標=230 y座標=170 色=水色オブジェクト 26 練習問題 (教科書または講義webページ参照) 27
© Copyright 2024 ExpyDoc