アルゴリズムとプログラミング (algorithms and programming)
DESCRIPTION
アルゴリズムとプログラミング (Algorithms and Programming). クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い方. 第6回:クラスとインスタンス. 講義資料等:. http://www.pe.titech.ac.jp/~watanabe/lecture/ap/index-j.html. クラスの宣言. Java におけるクラスの宣言. UML におけるクラス図. class クラス名 { }. クラス名. 猫. フィールド の宣言 - PowerPoint PPT PresentationTRANSCRIPT
アルゴリズムとプログラミング
(Algorithms and Programming)第6回:クラスとインスタンス
•クラスの宣言•アクセス修飾子•インスタンスの生成 (new キーワード)•this キーワード•フィールドとメソッドの実際の定義と使い方
•クラスの宣言•アクセス修飾子•インスタンスの生成 (new キーワード)•this キーワード•フィールドとメソッドの実際の定義と使い方
講義資料等: http://www.pe.titech.ac.jp/~watanabe/lecture/ap/index-j.html
クラスの宣言UML におけるクラス図
猫尾の長さ
体重ひげの本数
鳴く ()食べる ()
歩く ()
属性(attribute)
操作(operation)
Java におけるクラスの宣言
class クラス名 {
}
class クラス名 {
}
フィールドの宣言..... ;..... ;
メソッドの宣言..... ;..... ;
クラス名
猫 (Cat) クラスの宣言
猫 (Cat)尾の長さ (length) : double体重 (weight) : doubleひげの本数 (whisker):int
•クラス名を決める•フィールド名とその型、可視性を決める•メソッドを定義する(やり方は後述)
クラス名、フィールド名は識別子なので命名規則は変数と同じ
識別子の命名規則• 使える文字は半角文字の英字・数字・アンダースコア
「 _ 」に限定(例外は多いが避けた方が無難)
• 半角英字の大文字・小文字は区別される
• 数字で始まる識別子は認めない
• キーワード (keyword) と呼ばれる Java の予約語と、 true ・ false ・ null の3単語は使用できない。(他の語句と組み合わせれば可)
• 長さに制限はない
変数名,クラス名など
Java における可視性
猫 (Cat)+ 尾の長さ (length) : double# 体重 (weight) : double- ひげの本数 (whisker):int
UML では3種類だが Java では4種類
修飾子 アクセス可能な範囲指定無し 同じパッケージに属するクラス
のみprivate 同一クラス内のみprotected
同一クラスおよびサブクラスのみ
public 全てのクラスからアクセス可能
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 におけるクラスの宣言文
(とりあえずフィールドのみの例)
Box クラスの宣言
Box-id_number: long-width : double#depth : double+height:double
クラス図class Box {
}
class Box {
}
クラス宣言文
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;
}
クラス宣言文
インスタンスの生成まず、インスタンスを格納する変数を定義する .
変数を定義するには、変数名と型が必要変数名:識別子の命名規則に従って決める型:クラス名がそのまま型になる
Cat クラスのインスタンスを格納するための変数 p を定義
Cat p; (まだ実際のインスタンスは存在しない)
オブジェクト参照型変数
インスタンスの生成 (II)
new キーワード
p = new Cat();
•まず、 Cat クラスのインスタンスを格納するために必要なメモリ領域を新たに確保する (new) 。
•確保したメモリ領域に、初期値を代入する
•そのメモリ先頭番地を変数 p に格納する
•変数 p にはインスタンスの中身は格納されておらず、その先頭番地のみが格納されている
•プログラマは、変数 p を通してインスタンスの中身を参照したり変更したりする
p
0 1 2 番地
変数の中に先頭番地が格納される
p
Java VM が内部でやっていること
標識が立っているようなもの
これで新たにインスタンスが生成された!
メモリ領域を確保
データ
0 1 2 番地データ
Cat p;
p = new Cat();
Cat p = new Cat();
変数の宣言と代入は1行でも書ける
new キーワードの使い方
フィールドの値を参照する書式
オブジェクト参照型変数 . フィールド名
ピリオド
実際に参照できるかどうかはアクセス制限に依存する
p.length書式例)
フィールドへのアクセス(例)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 );
メソッドの定義と利用
クラス図
猫尾の長さ
体重ひげの本数
鳴く ()食べる ()
歩く ()
属性(attribute)
操作(operation)
Java におけるクラスの宣言
class クラス名 {
}
class クラス名 {
}
フィールドの宣言..... ;..... ;
メソッドの宣言..... ;..... ;
クラス名
メソッドの定義•メソッドは引数と、戻り値を持つ•型は厳しくチェックされる•複数の戻り値は持てない
書式:戻り値の型 メソッド名(型 引数 , 型 引数 ,... ){ メソッドの処理の記述 return 戻り値 ;}
戻り値の型 メソッド名(型 引数 , 型 引数 ,... ){ メソッドの処理の記述 return 戻り値 ;}
C 言語の「関数」と類似だが、型のチェックはずっと厳しい
int addValue ( int a, int b ) {
return a+b ;
}
int addValue ( int a, int b ) {
return a+b ;
}
2 つの引数を受け取ってその和を戻り値として返すメソッド
戻り値
仮引数
必ずしも ( ) で囲う必要はない
戻り値の型
戻り値が不要の場合
•戻り値の型を 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 );
}
引数も不要の場合
•引数の記述は省略可
void printHello () {
System.out.println( "Hello!" );
}
void printHello () {
System.out.println( "Hello!" );
}
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 キーワード• あるクラス宣言の中で使用され、そのクラ
スから生成されたオブジェクト自身を指す
this.weight
this.whisker
などが厳密な書き方だが普通は省略される
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 でも参照可
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 とする
引数がある場合
戻り値がある場合
メソッドの呼び出し方
オブジェクト参照型変数 . メソッド名 ( 引数 , 引数 ,...)
ピリオド
実際に呼び出せるかどうかはアクセス制限に依存する
まとめ
•クラスの宣言アクセス修飾子フィールドの定義メソッドの定義
•インスタンスの生成 (new キーワード)•this キーワード•フィールドとメソッドの使用例
•クラスの宣言アクセス修飾子フィールドの定義メソッドの定義
•インスタンスの生成 (new キーワード)•this キーワード•フィールドとメソッドの使用例