プログラミング言語 3 第 03 回 (2007 年 10 月 08 日 ) 1
今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 2/33
今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/ にアクセスすると 教材があります 2007 年 10 月 08 日分と書いてある部分が 本日の教材です 本日の内容 前回の課題の解答 オブジェクト指向プログラミング ( その1) 画面への文字の出力 3/33
前回の課題の解答 4/33
前回の課題 その 1: 講義資料の pdf ファイルにあった Sample02a.java をコンパイル 実行しなさい 実行結果 何故 そのような値が出力されたか を報告しなさい 5/33
解説実行結果 public class Sample02a{ public static void main(string[] args){ int[] t1 t1 = new int[10]; int[] t2 t2 = {0,1,2,3,4,5,6,7,8,9}; t1[1]=1; コンソールに System.out.println(t1[0]); 0 System.out.println(t1[1]); 1 System.out.println(t2[3]); 3 } と表示される } 6/33
解説実行結果 public class Sample02a{ public static void main(string[] args){ int[] t1 t1 = new int[10]; 1を代入 int[] t2 t2 = {0,1,2,3,4,5,6,7,8,9}; したので t1[1]=1; 1が出力 System.out.println(t1[0]); される System.out.println(t1[1]); System.out.println(t2[3]); } } 整数型の配列は 0 に初期化されるので 0 が出力される t2 宣言時に値を代入しているので 3 が出力される 7/33
前回の課題 その 2:t2 の配列の要素をすべて画面に出力するプログラムを書きなさい ここで while, for, do~while のうち 何れかを用いること 8/33
解説 for 文を使った場合 public class Sample02a{ public static void main(string[] args){ int[] t1 t1 = new int[10]; for 文で int[] t2 t2 = {0,1,2,3,4,5,6,7,8,9}; 使う為に int i; 配列のサイズは i; 変数 iを 10なので 0から for(i=0;i<=9;i++){ 宣言 9まで繰り返す System.out.println println(t2[i]); } t2[i] の値を出力 } } while や do~while を使った場合の例は webに挙がっています 9/33
オブジェクト指向プログラミング ( 基本編 ) 10/33
オブジェクト指向プログラミング C 言語は 関数を駆使して記述する言語だった 基本的に 全部の命令は関数 Java は オブジェクトを駆使して記述する言語 すべてオブジェクト 関数的に利用できるモノもあるけど クラス インスタンス メソッド 次のページから解説 理解するのは 結構 面倒です 11/33
オブジェクトって何? 直感編 概念とか設計図の世界 缶中身 =?? 何も言われないと空である できること 中身を出す 中身を入れる 缶 A 缶 B 実物 ( オブジェクト ) の世界 中身 = オレンジ色の液体 できること 中身を出す 中身を入れる 中身 = 水色の液体 できること 中身を出す 中身を入れる 12/33
オブジェクトって何? 直感と Java 編 Java だとインスタンスと呼ぶ 概念とか設計図の世界 変数 缶中身 =?? クラス コンストラクタ 何も言われないと空である できること 中身を出す 中身を入れる メソッド 缶 A 缶 B 実物 ( オブジェクト ) の世界 インスタンス 中身 = オレンジ色の液体 できること 中身を出す 中身を入れる 中身 = 水色の液体 できること 中身を出す 中身を入れる インスタンス 13/33
オブジェクトって何? Java 編 Java だとインスタンスと呼ぶ 概念とか設計図の世界 変数 Test コンストラクタ int contents; contests=0; Data1 実物 ( オブジェクト ) の世界 contents = 10; メソッド pushcontents(); popcontests(); クラス メソッド pushcontents(); popcontests(); メソッド Data2 インスタンス contents = 20; メソッド pushcontents(); popcontests(); インスタンス 14/33
オブジェクト指向プログラミング インスタンス間でデータをやりとりする それぞれのインスタンスが処理を行う インスタンス A 関数のように使えるクラス main インスタンス C インスタンス B 15/33
例 : ここから先は 覚える事が一杯です 頑張って勉強しましょう 16/33
Java のプログラムの構造 プログラムは 1 つ以上のクラスを持ちます クラスは 変数とコンストラクタ メソッドを伴っています それぞれ 省略可能です メソッド main を持つクラスが 必ず必要です プログラムのファイル名と main を持つクラス名は 一致している必要があります 慣習として クラス名は大文字から メソッド名は小文字から初めます プログラムクラス変数の宣言コンストラクタメソッドクラス変数の宣言コンストラクタメソッド 17/33
サンプル例 1 Hello.java の場合 : public class Hello { main を持っているクラス名が Hello なので ファイル名は Hello.java クラスが持っている変数は無し コンストラクタも無し } public static void void main(string[] args) { System.out.println("Hello, world!"); } メソッドは main だけ 18/33
やりたいこと 1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる 19/33
修飾子について 1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる 修飾子というのが これから出てきます それぞれの変数やメソッドを どこから利用できるかを指定します public : すべてのクラスのメソッドからアクセス可能 private: 同じクラスのメソッドからのみアクセス可能省略したら 同じパッケージ内でpublicになる Data1 public な変数 private な変数 public なメソッド private なメソッド Data3 20/33
クラスの書き方 1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる 必要なら修飾子を書く ( クラスの修飾子については次回以降 ) class Test Test { int test01; class と書く class 名を書く 変数やメソッドをクラスのメンバと言います 変数を宣言する } コンストラクタを書くが 今回はなし 次回以降に詳細 public void push(int test03){ } System.out.println(test01 + test03); メソッドを書く 書き方は後のスライド 21/33
変数の宣言の書き方 1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる 修飾子と static 以外は C 言語の書き方に似ています 型を書く 変数名を書く 必要なら static と書く 説明は次回以降 int inttest01; static int inttest02; public int int test04; 修飾子を書く 22/33
メソッドの書き方 1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる 修飾子以外は C 言語の関数の書き方に似ています 修飾子を書く必要ならstaticと書く 返値の型を書くメソッド名を書く引数を書く public void void push(int test03){ } System.out.println(test01 + test03); メソッドの中でのみ使用する変数の定義を書く 返値が有る場合は C と同様 return で返す 23/33
1. クラスを書く インスタンスの生成その 1 2. インスタンスを生成する 3. 実際に使ってみる 宣言と生成を行う必要がある 宣言の仕方 : クラス名インスタンス名 ; 生成の仕方 : インスタンス名 = new クラス名 (); 例えば クラス Test のインスタンス dt を生成するなら Test dt; dt = new Test(); とする 24/33
インスタンスの生成その 2 宣言と生成を 1 行で書くこともできる クラス名インスタンス名 = new クラス名 (); たとえば クラス Test のインスタンス dt を生成するなら Test dt = new Test(); 1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる
使い方 1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる インスタンスのメンバにアクセスするには インスタンス名.. メンバ名 とする たとえば クラス Test に整数型の変数 test01 という変数があって クラス Test のインスタンス dt を生成した場合 dt.test01 としてアクセスできる
サンプルプログラム class Test{ multiple(); int inttest01=2; public void void multiple(int test03){ System.out.println(test01 * test03); クラスTestの } インスタンスdtを生成 } dt test01=2; public class Sample03a{ public static void void main(string[] args){ Test Test dt dt = new new Test(); dt.multiple(100); dt.test01=5; dt test01=5; dt.multiple(100); } multiple(); } クラス Test の詳細 Test test01=2; multiple(); メソッドを 引数 100 を渡して実行 インスタンス dt の変数 test01 に代入
標準出力への出力 28/33
println メソッドと print メソッド 標準出力に文字を出力するメソッド System.out.print() 出力した後 改行しない System.out.println() 出力した後 改行する 改行する しないの違いがあるだけで 他は一緒 29/33
基本的な使い方その 1 文字列 Test Data を表示する例 : System.out.println("Test Data"); int 型の変数 t の値を表示する例 : System.out.println(t); そのまま 変数名を書けば OK 値 100 を表示する例 : System.out.println(100); "" で文字を囲む C 言語と違う C の場合 printf("%u n",t); そのまま書くと "100" と解釈して出力してくれる 30/33
基本的な使い方その 2 文字列 Test Data と整数型の変数 t の値を表示する例 : System.out.println("Test Data " + t); 出力結果 (t=10 の場合 ): Test Data 10 t+10 の値を表示する例 : + 記号で連結できる System.out.println(t + 10); 出力結果 (t=10 の場合 ): 20 + は演算と解釈される 31/33
色んな例 文字列と変数と値が + で並んでいる例 : System.out.println("Test Data " + t + 10); 出力結果 (t=10 の場合 ): Test Data 10 10 文字列と変数と値が + で並んでいる例 : 2 つの + は どちらも連結と解釈される System.out.println("Test Data " + (t (t + 10)); 出力結果 (t=10 の場合 ): Test Data 20 連結 括弧おかげで 演算として解釈 32/33
サンプルプログラム : ファイル名は public class Sample03b{ Sample03.java public static void main(string[] args){ int t=10; System.out.println("Test Data"); System.out.println(t); System.out.println(t+10); System.out.println("Test Data" + t); System.out.println("Test Data " + t + 10); System.out.println("Test Data " + (t (t + 10)); } } 33/33
誤植のおもひで 21ページ目上から2 行目 : 誤 : 必要ならstaticと書く 正 : 削除 34/33