アルゴリズムとプログラミン グ (Algorithms and Programming) 第6回:クラスとインスタンス クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 クラスの宣言 アクセス修飾子 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの実際の定義と使い 方 講義資料等:
クラスの宣言 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 012 番地 変数の中に先頭番地が 格納される p Java VM が内部でやっていること 標識が立っているようなもの これで新たにインスタンスが 生成された! メモリ領域を確保 データ 012 番地 データ
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 フィールドに 値 を代入する p.weight= ; ピリオドの後にフィールド名を指定する 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 * ) ; } 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 * ) ; } 例) フィール ド メソッド
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 * ) ; } 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 * ) ; } 例) 厳密には this.weight だが通常は this を省略 同一クラス内なら private でも参照可
class SampleCat { public static void main(String[] args) { Cat p = new Cat(); p.setValue( , 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( , 8 ); p.printField(); int w_kg = p.getWeightKg(); System.out.println(" 体重は "+ w_kg +"kg"); } メソッドの呼び出し方 先の Cat クラス宣言文の後に追加して SampleCat.java とする 引数がある場合 戻り値がある場合
メソッドの呼び出し方 オブジェクト参照型変数. メソッド名 ( 引数, 引数,...) ピリオド 実際に呼び出せるかどうかは アクセス制限に依存する
まとめ クラスの宣言 アクセス修飾子 フィールドの定義 メソッドの定義 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの使用例 クラスの宣言 アクセス修飾子 フィールドの定義 メソッドの定義 インスタンスの生成 (new キーワード) this キーワード フィールドとメソッドの使用例