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

Slides:



Advertisements
Similar presentations
アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成.
Advertisements

オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
Applet 岡部 祐典 鈴木 敬幸.
~手続き指向からオブジェクト指向へ(Ⅰ)~
プログラミング基礎I(再) 山元進.
プログラミングパラダイム さまざまな計算のモデルにもとづく、 プログラミングの方法論 手続き型 関数型 オブジェクト指向 代数 幾何.
アルゴリズムとデータ構造1 2007年6月12日
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング基礎I(再) 山元進.
Javaのインタフェース についての補足 2006年5月17日 海谷 治彦.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
アルゴリズムとプログラミング (Algorithms and Programming)
計算機プログラミングI 第12回 2003年1月23日(木) インターフェース スレッド 最後に お知らせ クイズ 授業アンケート
プログラミングIII演習 第1回目.
社会人学習講座 「Javaプログラミング概論」
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
インタフェース プログラミング 第14回 インタフェース プログラミング第14回.
オブジェクト指向入門.
計算機プログラミングI 第8回 2002年12月5日(木) メソッドとクラス (教科書6章) クイズ インスタンスメソッド インスタンス変数
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
ソフトウェア工学 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
第7回独習Javaゼミ セクション 1~4 発表者 直江 宗紀.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
第11週:super/subクラス、継承性、メソッド再定義
アルゴリズムとプログラミング (Algorithms and Programming)
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
7.4 intanceof 演算子 7.5~7.9パッケージ 2003/11/28 紺野憲一
計算機プログラミングI 第11回 再帰 再帰的なメソッド定義 帰納的定義 再帰的なデータ構造 計算機プログラミングI (増原) 2003年度.
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
パッケージ,アクセス修飾子 2008年4月27日 海谷 治彦.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
計算機プログラミングI 第5回 配列 文字列(Stringクラス) mainの引数 配列の利用例
計算機プログラミングI 第8回 素数を見つけるアルゴリズム 継承とインスタンスメソッド クラスの設計 オブジェクトに機能を加える
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
アルゴリズムとプログラミング (Algorithms and Programming)
計算機プログラミングI 第4回 2002年10月31日(木) 問題解決とアルゴリズム クラスメソッドと手続きの抽象化 最大公約数
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
演算子のオーバーロード.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング 3 ポインタ(1).
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

計算機プログラミング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) 練習問題

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

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

プログラム 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 に変更 }

整数型の変数の宣言 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をしまう と同じ

引数つきのコンストラクタ 意味: 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() と違う? ― オーバーロード

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

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

パッケージ “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クラス”

式 数式だけが式ではない 演算子: +, -, *, /, %, &, |, ... 式: 値を表わす単位 数値は式 変数は式 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.

式の値 数値→ その値 変数→ そのときに入っている値 “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. 値の和

代入と変数の値 変数式: その時点で 変数に入っている値 代入: 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

変数と値の抽象化 何故変数を 使うのか? 変数: 同じ意図を持った値を 明示できる 値に名前を付ける これも 同じように 動く 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)に 変更するには?

変数と値の抽象化 より良い プログラム(?) 全体を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)に 変更するには?

プログラム 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); }

パッケージ名の略記 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パッケージ内の全てのクラスを略記

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

メソッドの返り値 メソッドの返り値を使っている 計算式の中で 使ってもよい 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); と書いても同じ

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

フィールド (インスタンス変数) 代入して値を 変更できる 計算式の中で 使ってもよい 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); } 代入して値を 変更できる 計算式の中で 使ってもよい

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

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