Microsoft PowerPoint - prog04.ppt

Similar documents
Microsoft PowerPoint - prog03.ppt

Microsoft PowerPoint - java13bb.ppt

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - prog09.ppt

Microsoft PowerPoint - prog08.ppt

Microsoft PowerPoint - prog08.ppt

Microsoft PowerPoint - prog07.ppt

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

PowerPoint プレゼンテーション

Microsoft PowerPoint - chap10_OOP.ppt

Javaプログラムの実行手順

Microsoft PowerPoint - prog08.ppt

プログラミング基礎I(再)

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Microsoft PowerPoint - prog06.ppt

PowerPoint プレゼンテーション

JavaプログラミングⅠ

プログラミング入門1

メディプロ1 Javaプログラミング補足資料.ppt

Javaの作成の前に

ガイダンス

Microsoft PowerPoint ppt

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Microsoft PowerPoint - prog03.ppt

JavaプログラミングⅠ

Prog1_6th

PowerPoint プレゼンテーション

スライド 1

Microsoft PowerPoint ppt

Java言語 第1回

Microsoft PowerPoint - prog04.ppt

Microsoft PowerPoint - prog12.ppt

デジタル表現論・第4回

プログラミング入門1

JAVA入門

Microsoft PowerPoint - lec06 [互換モード]

JavaプログラミングⅠ

プログラミング入門1

PowerPoint プレゼンテーション

JavaプログラミングⅠ

Microsoft PowerPoint - prog13.ppt

メソッドのまとめ

Microsoft PowerPoint - prog13.ppt

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

できるプログラマーを本気で育てる Java 超 Webプログラマーへの第 歩 第 2 回オブジェクト指向 テクノロジックアート 瀬 嘉秀

Microsoft PowerPoint - prog11.ppt

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

プログラミングA

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

プログラミング実習I

ガイダンス

JavaプログラミングⅠ

プログラミング入門1

GEC-Java

Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 (

ガイダンス

デジタル表現論・第6回

情報実習Ⅱ

Prog2_9th

Microsoft Word - problem3.doc

コンピュータ中級B ~Javaプログラミング~ 第3回 コンピュータと情報をやりとりするには?

JavaプログラミングⅠ

Microsoft PowerPoint - 計算機言語 第7回.ppt

Prog2_12th

ガイダンス

Sort-of-List-Map(A)

Microsoft PowerPoint - 09.pptx

Java講座

Week 1 理解度確認クイズ解答 解説 問題 1 (4 2 点 =8 点 ) 以下の各問いに答えよ 問題 bit 版の Windows8.1 に Java をインストールする時 必要なパッケージはどれか 但し Java のコンパイルができる環境をインストールするものとする 1. jdk

GEC-Java

プログラミング入門1

プログラミング入門1

基本情報STEP UP演習Java対策

Java知識テスト問題

オブジェクト指向プログラミング・同演習 5月21日演習課題

JAVA とテンプレート

Prog1_2nd

memo

Prog1_15th

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

C#の基本2 ~プログラムの制御構造~

JavaプログラミングⅠ

プログラミング入門1

Microsoft PowerPoint - ruby_instruction.ppt

DVIOUT-exer

Microsoft PowerPoint - class2-OperatorOverLoad.pptx

情報処理Ⅰ演習

PowerPoint プレゼンテーション

プログラミング入門1

JavaプログラミングⅠ

第二回独習 Java ゼミ 第二章クラスとメソッド 2.1 メソッドの構造 2.2 静的メソッドと静的変数の概要 2.3 インスタンスメソッドとインスタンス変数の概要 2.4 Integerクラス 2006/04/19 神津健太

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

プログラミング入門1

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

PowerPoint プレゼンテーション

Prog1_3rd

Transcription:

プログラミング言語 3 第 04 回 (2007 年 10 月 15 日 ) 1 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 2/33 1

今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/ にアクセスすると 教材があります 2007 年 10 月 15 日分と書いてある部分が 本日の教材です 本日の内容 クラスとインストラクタ ( 復習 ) 前回の課題の解答 static コンストラクタ メソッドのオーバーロード 3/33 オブジェクト指向プログラミング ( 復習 ) 4/33 2

オブジェクト指向プログラミング データをやり取りするオブジェクトの集合として構成されるプログラム インスタンス間でデータをやりとりする それぞれのインスタンスが処理を行う main 関数のように使えるクラス データを持ったり 処理したりする インスタンス A インスタンス C データをやりとり インスタンス B 5/33 オブジェクトって何? Java 編 概念とか設計図の世界 変数 Test クラス コンストラクタ int contents; contests=0; メソッド popcontests(); メソッド Data1 Data2 実物 ( オブジェクト ) の世界 インスタンス contents = 10; メソッド popcontests(); contents = 20; Java だとインスタンスと呼ぶ メソッド popcontests(); インスタンス 6/33 3

Java のプログラム プログラムは 1 つ以上のクラスを持ちます クラスは 変数とコンストラクタ メソッドを伴っています それぞれ 省略可能です メソッド main を持つクラスが 必ず必要です インスタンス ( 物体 ) を生成するためには クラス ( 設計図 ) が必要 1. クラスを書く 2. インスタンスを生成する 3. 処理を行う プログラムクラス変数の宣言コンストラクタメソッドクラス変数の宣言コンストラクタメソッド 7/33 クラスの書き方 1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる 必要なら修飾子を書く ( クラスの修飾子については次回以降 ) class Test Test { int test01; class と書く class 名を書く 変数やメソッドをクラスのメンバと言います 変数を宣言する コンストラクタを書く 今日の話の後半で説明 public void push(int test03){ System.out.println(test01 + test03); メソッドを書く 8/33 4

メソッドの書き方 修飾子以外は C 言語の関数の書き方に似ています 修飾子を書く必要ならstaticと書く 返値の型を書くメソッド名を書く引数を書く public void void push(int test03){ System.out.println(test01 + test03); 1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる メソッドの中でのみ使用する変数の定義を書く 返値が有る場合は C と同様 return で返す 9/33 インスタンスの生成 1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる 宣言と生成を行う必要がある 宣言の仕方 : クラス名インスタンス名 ; 生成の仕方 : インスタンス名 = new クラス名 (); 例えば クラス Test のインスタンス dt を生成するなら Test dt; dt = new Test(); とする 10/33 5

使い方 1. クラスを書く 2. インスタンスを生成する 3. 実際に使ってみる インスタンスのメンバにアクセスするには インスタンス名.. メンバ名 とする たとえば クラス Test に整数型の変数 test01 という変数があって クラス Test のインスタンス dt を生成した場合 dt.test01 としてアクセスできる 前回の課題の解答 12/33 6

その 1: 前回の課題 オブジェクト指向プログラミングについて 自分の理解した範囲で良いので 自分なりに説明してみなさい 13/33 オブジェクト指向プログラミング データをやり取りするオブジェクトの集合として構成されるプログラム インスタンス間でデータをやりとりする それぞれのインスタンスが処理を行う main 関数のように使えるクラス インスタンス A インスタンス C インスタンス B 14/33 7

前回の課題 その2: Sample03a.java をコンパイル 実行しなさい レポートとして 実行結果を報告しなさい メソッド multiple が 何を行うかを解説しなさい 各行が何を行っているか 説明しなさい 何故 そのような値が出力されたかを インスタンス dt の変数 test01 やメソッド multiple に注目して解説しなさい 15/33 実行結果 class Test{ int int test01=2; public void void multiple(int test03){ System.out.println(test01 * test03); public class Sample03a{ public static void void main(string[] args){ Test Test dt dt = new new Test(); dt.multiple(100); dt.test01=5; dt.multiple(100); コンソールに 200 500 と表示される 8

メソッド multible が行うこと class Test{ int int test01=2; public void void multiple(int test03){ System.out.println(test01 * test03); public class Sample03a{ public static void void main(string[] args){ Test Test dt dt = new new Test(); dt.multiple(100); dt.test01=5; dt.multiple(100); インスタンスが持っている値 test01 と 引数として渡される test03 の値を乗算し画面に出力する dt test01=2; multiple(); インスタンスが持っている test01 の値は 2 引数として 100 が渡されるので 200 が出力される 各行がやっていることクラス Test の定義開始 class Test{ 整数型の変数 test01の宣言 初期値は2 int int test01=2; public void void multiple(int test03){ メソッドmultipleは整 System.out.println(test01 * test03); 数型の引数を貰う 返り値は無し test01とtest03の乗算の結果を publicである 標準出力に出力 クラスSample03aの定義開始 public class Sample03a{ メソッドmain 開始 public static void void main(string[] args){ Test Test dt dt = new new Test(); インスタンスdtを生成 dt.multiple(100); インスタンスdtのメソッドmultipleを dt.test01=5; 引数として100を与えて実行 dt.multiple(100); インスタンスdtの変数 test01にインスタンスdtのメソッドmultipleを 5を代入引数として100を与えて実行 9

出力の理由 クラス Test の詳細 Test 整数値を保存する場所を持つ test01=2; test01と引数を乗算し multiple(); 画面に出力する機能を class Test{ 持つ int int test01=2; public void void multiple(int test03){ クラスTestの System.out.println(test01 * test03); インスタンスdtを生成 dt test01=2; multiple(); public class Sample03a{ public static void void main(string[] args){ Test Test dt dt = new new Test(); メソッドを 引数 100を渡して実行 dt.multiple(100); test01の値は2なので 200が出力 dt.test01=5; dt.multiple(100); dt test01=5; インスタンスdtの test01の値は5なので multiple(); 変数 test01に代入 500が出力 前回の課題 その 3: Sample03b.java をコンパイル 実行しなさい レポートとして 実行結果 何故 そのような値が出力されたか を報告しなさい 20/33 10

出力結果と理由前半 public class Sample03b{ public static void main(string[] args){ int t=10; System.out.println("Test Data"); System.out.println(t); 10と出力 System.out.println(t+10); System.out.println("Test Data" + t); System.out.println("Test Data " + t + 10); 20と出力 System.out.println("Test Data " + (t (t + 10)); 出力される Test Data と出力 "" で囲っているので 文字列と認識される 整数型の変数 tの値が出力される 整数型の変数 t と 10 の和が + は演算として解釈される 21/33 出力結果と理由前半 public class Sample03b{ public static void main(string[] args){ int t=10; Test Data10 System.out.println("Test と出力 Data"); Data1010と出力 "" で囲われた部分は文字列として その後 System.out.println(t); 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)); Test Data20 と出力 括弧で囲まれた部分 (t+10) が先に計算される 1 つめの + は連結として解釈される "" で囲われた部分は文字列として その後 tの値と10が出力される 22/33 11

static 23/33 クラスメンバとインスタンスメンバ 変数やメソッドには static をつけることができます staticがついているものをクラスメンバクラスメンバ ついていないものをインスタンスメンバインスタンスメンバと呼びます staticがついている変数やメソッドに関しては すべてのインスタンスが 同じモノを使うようになります クラスメンバは インスタンスを生成しなくても利用することができます クラスメンバには クラス名.. メンバ名のようにアクセスします 24/33 12

直感的な図 概念とか設計図の世界 Test int contents; static int st_cont; static cont(); Test.st_cont=10; Test. cont(); 実物 ( オブジェクト ) の世界 インスタンスを生成しなくても アクセス可能 クラス名. メンバ名でアクセスする 今回は Test.st_cont の様にする 25/33 直感的な図 概念とか設計図の世界 Test int contents; static int st_cont; static cont(); Data1 実物 ( オブジェクト ) の世界 contents = 10; st_cont; cont(); Test.st_cont=10; Data2 contents = 20; st_cont; Test. cont(); cont(); 26/33 13

直感的な図 概念とか設計図の世界 Test int contents; static int st_cont; static cont(); 同じものを利用 Test.st_cont=10; Test.cont(); Data1 Data2 実物 ( オブジェクト ) の世界 contents = 10; st_cont; cont(); contents = 20; st_cont; cont(); 27/33 直感的な図 概念とか設計図の世界 Test int contents; static int st_cont; Test.st_cont=15 static とすれば cont(); Data1.st_cont も15に Test.st_cont=15; Test.cont(); Data1 Data2 実物 ( オブジェクト ) の世界 contents = 10; st_cont; cont(); contents = 20; st_cont; cont(); 28/33 14

直感的な図 概念とか設計図の世界 Test int contents; static int st_cont; static cont(); Data1 ここに値を代入! Data1.st_count=20 実物 ( オブジェクト ) の世界 contents = 10; st_cont; cont(); Test.st_cont=20; Test.cont(); Data2 contents = 20; st_cont; ここに代入と同じ結果に cont();! 29/33 クラスの書き方の例 class Test{ static static int int st_data; int int data; public void void test_func01(){ System.out.println(data); public static static void void test_func02(){ System.out.println(st_data); public class Sample04a{ public static void void main(string[] args){ Test.st_data st_data=10; Test.test_func02(); static と書くだけです インスタンスを生成しなくても使える 30/33 15

利点 メソッドの場合 わざわざインスタンスを生成しなくても その機能を利用できるようになります 変数の場合 複数のインスタンスで共通に使える変数を利用できるようになります 31/33 注意する点 static なメソッドの中では インスタンスメンバな変数にアクセスすることはできません class Test{ static int int st_data; int int data; public static void void test_func02(){ 文 ; static なメソッド test_func02 の中からは 変数 data は利用できない 32/33 16

コンストラクタ 33/33 コンストラクタって? 返値のない関数のように書かれます インスタンスを生成するときに 自動的に実行されます コンストラクタの名前は クラスの名前と同一になります インスタンスを生成するときに渡す引数の種類によって 使用するコンストラクタを切り替えることができます コンストラクタが無い場合は 何も行われません それぞれの変数は 決められた初期値になります この機能を使うと 柔軟に初期値とかを設定できます 34/33 17

コンストラクタの書き方 返値の無いメソッドのように書きます クラスと同じ名前を書く 1. クラスを書く クラス test04 のコンストラクタの場合... 2. インスタンスを生成する 3. 実際に使ってみる 引数を書く クラスを生成するときに渡される引数に対応 test04(int test03){ 文 ; 実行する内容を書く 35/33 例 1: class Test{ int value; コンストラクタ Test(int value01){ value=value01*10; インスタンス生成時の引数は コンストラクタに渡される インスタンスが生成されたときに実行される public class Sample04b{ public static void main(string[] args){ Test dt02 = new Test(100); System.out.println(dt02.value); 36/33 18

例 2: 2 つ以上のコンストラクタを書くことができる どちらが実行されるかは 引数で判断される class Test{ int value; Test(){ value=10; Test(int value01){ value=value01*10; public class Sample04c{ public static void main(string[] args){ Test dt01 = new Test(); Test dt02 = new Test(100); System.out.println(dt01.value); System.out.println(dt02.value); 引数が無いので こちらが実行される 引数として整数が一つ渡されるので こちらが実行される 37/33 メソッドのオーバーロード 38/33 19

オーバーロードって? メソッドも 引数のデータ型 個数 並び方のどれかが異なっていれば 同じ名前で沢山定義することができます これをオーバーロードと言います 異なる引数で同じ処理を行いたいとき等に便利です 39/33 例 : public class Sample04d{ public static void main(string[] args){ calc(10,20); calc(10.5,20.5); 同じクラスのメソッドは メソッド名だけで実行できます 引数が ( 整数, 整数 ) なので こちらが実行 public static void calc(int data01, int data02){ System.out.println(data01*data02); 引数が (double,double) なので こちらが実行 public static void calc(double data01, double data0 2){ System.out.println(data01+data02); 40/33 20

誤植のおもひで 8ページ目上から2 行目 : 誤 : 必要ならstaticと書く 正 : 削除 17ページ目一番下 誤 : インスタンスが持っている test01 の値は 5 引数として 100 が渡されるので 500 が出力される 正 : インスタンスが持っている test01 の値は 2 引数として 100 が渡されるので 200 が出力される 22 ページ目一番下の吹き出し 1 行目 誤 : Test Data10 と出力 正 : Test Data20 と出力 41/33 21