アルゴリズムとプログラミング (algorithms and programming)

24
アアアアアアアアアアアアアア (Algorithms and Programming) アア アアアアアアアアアア 6: •アアアアアア •アアアアアアア •アアアアアアアアア (new アアアアア•this アアアアア •アアアアアアアアアアアアアアアアアアアア アアアアアhttp://www.pe.titech.ac.jp/~watanabe/lecture/ap/index-j.html

Upload: marcus

Post on 06-Jan-2016

22 views

Category:

Documents


0 download

DESCRIPTION

アルゴリズムとプログラミング (Algorithms and Programming). クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い方. 第6回:クラスとインスタンス. 講義資料等:. http://www.pe.titech.ac.jp/~watanabe/lecture/ap/index-j.html. クラスの宣言. Java におけるクラスの宣言. UML におけるクラス図. class クラス名 { }. クラス名. 猫. フィールド の宣言 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: アルゴリズムとプログラミング (Algorithms and Programming)

アルゴリズムとプログラミング

(Algorithms and Programming)第6回:クラスとインスタンス

•クラスの宣言•アクセス修飾子•インスタンスの生成 (new キーワード)•this キーワード•フィールドとメソッドの実際の定義と使い方

•クラスの宣言•アクセス修飾子•インスタンスの生成 (new キーワード)•this キーワード•フィールドとメソッドの実際の定義と使い方

講義資料等: http://www.pe.titech.ac.jp/~watanabe/lecture/ap/index-j.html

Page 2: アルゴリズムとプログラミング (Algorithms and Programming)

クラスの宣言UML におけるクラス図

猫尾の長さ

体重ひげの本数

鳴く ()食べる ()

歩く ()

属性(attribute)

操作(operation)

Java におけるクラスの宣言

class クラス名 {

  

}

class クラス名 {

  

}

フィールドの宣言..... ;..... ;

メソッドの宣言..... ;..... ;

クラス名

Page 3: アルゴリズムとプログラミング (Algorithms and Programming)

猫 (Cat) クラスの宣言

猫 (Cat)尾の長さ (length) : double体重 (weight) : doubleひげの本数 (whisker):int

•クラス名を決める•フィールド名とその型、可視性を決める•メソッドを定義する(やり方は後述)

クラス名、フィールド名は識別子なので命名規則は変数と同じ

Page 4: アルゴリズムとプログラミング (Algorithms and Programming)

識別子の命名規則• 使える文字は半角文字の英字・数字・アンダースコア

「 _ 」に限定(例外は多いが避けた方が無難)

• 半角英字の大文字・小文字は区別される

• 数字で始まる識別子は認めない

• キーワード (keyword) と呼ばれる Java の予約語と、 true ・ false ・ null の3単語は使用できない。(他の語句と組み合わせれば可)

• 長さに制限はない

変数名,クラス名など

Page 5: アルゴリズムとプログラミング (Algorithms and Programming)

Java における可視性

猫 (Cat)+ 尾の長さ (length) : double# 体重 (weight) : double- ひげの本数 (whisker):int

UML では3種類だが Java では4種類

修飾子 アクセス可能な範囲指定無し 同じパッケージに属するクラス

のみprivate 同一クラス内のみprotected

同一クラスおよびサブクラスのみ

public 全てのクラスからアクセス可能

Page 6: アルゴリズムとプログラミング (Algorithms and Programming)

Cat クラスの宣言

class Cat {

public double length;

protected double weight;

private int whisker;   

}

class Cat {

public double length;

protected double weight;

private int whisker;   

}

猫 (Cat)+ 尾の長さ (length) : double# 体重 (weight) : double- ひげの本数 (whisker):int

クラス図 Java におけるクラスの宣言文

(とりあえずフィールドのみの例)

Page 7: アルゴリズムとプログラミング (Algorithms and Programming)

Box クラスの宣言

Box-id_number: long-width : double#depth : double+height:double

クラス図class Box {

}

class Box {

}

クラス宣言文

Page 8: アルゴリズムとプログラミング (Algorithms and Programming)

Box クラスの宣言

Box-id_number: long-width : double#depth : double+height:double

クラス図class Box {

private long id_number;

private double width;

protected double depth;

public double height;

}

class Box {

private long id_number;

private double width;

protected double depth;

public double height;

}

クラス宣言文

Page 9: アルゴリズムとプログラミング (Algorithms and Programming)

インスタンスの生成まず、インスタンスを格納する変数を定義する .

変数を定義するには、変数名と型が必要変数名:識別子の命名規則に従って決める型:クラス名がそのまま型になる

Cat クラスのインスタンスを格納するための変数 p を定義

Cat p; (まだ実際のインスタンスは存在しない)

オブジェクト参照型変数

Page 10: アルゴリズムとプログラミング (Algorithms and Programming)

インスタンスの生成 (II)

new キーワード

p = new Cat();

•まず、 Cat クラスのインスタンスを格納するために必要なメモリ領域を新たに確保する (new) 。

•確保したメモリ領域に、初期値を代入する

•そのメモリ先頭番地を変数 p に格納する

•変数 p にはインスタンスの中身は格納されておらず、その先頭番地のみが格納されている

•プログラマは、変数 p を通してインスタンスの中身を参照したり変更したりする

p

0 1 2 番地

変数の中に先頭番地が格納される

p

Java VM が内部でやっていること

標識が立っているようなもの

これで新たにインスタンスが生成された!

メモリ領域を確保

データ

0 1 2 番地データ

Page 11: アルゴリズムとプログラミング (Algorithms and Programming)

Cat p;

p = new Cat();

Cat p = new Cat();

変数の宣言と代入は1行でも書ける

new キーワードの使い方

Page 12: アルゴリズムとプログラミング (Algorithms and Programming)

フィールドの値を参照する書式

オブジェクト参照型変数 . フィールド名

ピリオド

実際に参照できるかどうかはアクセス制限に依存する

p.length書式例)

Page 13: アルゴリズムとプログラミング (Algorithms and Programming)

フィールドへのアクセス(例)class Cat {

public double length;

protected double weight;

private int whisker;   }

class Cat {

public double length;

protected double weight;

private int whisker;   }

weight フィールドに値 2000.0 を代入する

p.weight=2000.0;

ピリオドの後にフィールド名を指定する

length フィールドの値を表示System.out.println( p.length );

Page 14: アルゴリズムとプログラミング (Algorithms and Programming)

メソッドの定義と利用

クラス図

猫尾の長さ

体重ひげの本数

鳴く ()食べる ()

歩く ()

属性(attribute)

操作(operation)

Java におけるクラスの宣言

class クラス名 {

  

}

class クラス名 {

  

}

フィールドの宣言..... ;..... ;

メソッドの宣言..... ;..... ;

クラス名

Page 15: アルゴリズムとプログラミング (Algorithms and Programming)

メソッドの定義•メソッドは引数と、戻り値を持つ•型は厳しくチェックされる•複数の戻り値は持てない

書式:戻り値の型 メソッド名(型 引数 , 型 引数 ,... ){  メソッドの処理の記述   return 戻り値 ;}

戻り値の型 メソッド名(型 引数 , 型 引数 ,... ){  メソッドの処理の記述   return 戻り値 ;}

C 言語の「関数」と類似だが、型のチェックはずっと厳しい

Page 16: アルゴリズムとプログラミング (Algorithms and Programming)

int addValue ( int a, int b ) {

return a+b ;

}

int addValue ( int a, int b ) {

return a+b ;

}

2 つの引数を受け取ってその和を戻り値として返すメソッド

戻り値

仮引数

必ずしも ( ) で囲う必要はない

戻り値の型

Page 17: アルゴリズムとプログラミング (Algorithms and Programming)

戻り値が不要の場合

•戻り値の型を void と記述する•return 文は省略可

void printValue ( int a, int b ) {

System.out.println( "a=" + a );

System.out.println( "b=" + b );

}

void printValue ( int a, int b ) {

System.out.println( "a=" + a );

System.out.println( "b=" + b );

}

Page 18: アルゴリズムとプログラミング (Algorithms and Programming)

引数も不要の場合

•引数の記述は省略可

void printHello () {

System.out.println( "Hello!" );

}

void printHello () {

System.out.println( "Hello!" );

}

Page 19: アルゴリズムとプログラミング (Algorithms and Programming)

class Cat {

public double weight;

private int whisker;   

void printField() {

System.out.println(" 体重は "+weight+"g");

System.out.println(" ひげは "+whisker+" 本 ");

}

void setValue(double w, int n ) {

weight = w;

whisker = n ;

}

int getWeightKg(){

return (weight * 0.001 ) ;

}

}

class Cat {

public double weight;

private int whisker;   

void printField() {

System.out.println(" 体重は "+weight+"g");

System.out.println(" ひげは "+whisker+" 本 ");

}

void setValue(double w, int n ) {

weight = w;

whisker = n ;

}

int getWeightKg(){

return (weight * 0.001 ) ;

}

}

例)

フィールド

メソッド

Page 20: アルゴリズムとプログラミング (Algorithms and Programming)

this キーワード• あるクラス宣言の中で使用され、そのクラ

スから生成されたオブジェクト自身を指す

this.weight

this.whisker

などが厳密な書き方だが普通は省略される

Page 21: アルゴリズムとプログラミング (Algorithms and Programming)

class Cat {

public double weight;

private int whisker;   

void printField() {

System.out.println(" 体重は "+weight+"g");

System.out.println(" ひげは "+whisker+" 本 ");

}

void setValue(double w, int n ) {

weight = w;

whisker = n ;

}

int getWeightKg(){

return (weight * 0.001 ) ;

}

}

class Cat {

public double weight;

private int whisker;   

void printField() {

System.out.println(" 体重は "+weight+"g");

System.out.println(" ひげは "+whisker+" 本 ");

}

void setValue(double w, int n ) {

weight = w;

whisker = n ;

}

int getWeightKg(){

return (weight * 0.001 ) ;

}

}

例)

厳密には this.weightだが通常は this を省

同一クラス内ならprivate でも参照可

Page 22: アルゴリズムとプログラミング (Algorithms and Programming)

class SampleCat {

public static void main(String[] args) {

Cat p = new Cat();

p.setValue( 1000.0, 8 );

p.printField();

int w_kg = p.getWeightKg();

System.out.println(" 体重は "+ w_kg +"kg");

}

}

class SampleCat {

public static void main(String[] args) {

Cat p = new Cat();

p.setValue( 1000.0, 8 );

p.printField();

int w_kg = p.getWeightKg();

System.out.println(" 体重は "+ w_kg +"kg");

}

}

メソッドの呼び出し方先の Cat クラス宣言文の後に追加して SampleCat.java とする

引数がある場合

戻り値がある場合

Page 23: アルゴリズムとプログラミング (Algorithms and Programming)

メソッドの呼び出し方

オブジェクト参照型変数 . メソッド名 ( 引数 , 引数 ,...)

ピリオド

実際に呼び出せるかどうかはアクセス制限に依存する

Page 24: アルゴリズムとプログラミング (Algorithms and Programming)

まとめ

•クラスの宣言アクセス修飾子フィールドの定義メソッドの定義

•インスタンスの生成 (new キーワード)•this キーワード•フィールドとメソッドの使用例

•クラスの宣言アクセス修飾子フィールドの定義メソッドの定義

•インスタンスの生成 (new キーワード)•this キーワード•フィールドとメソッドの使用例