Upload
maili
View
29
Download
0
Embed Size (px)
DESCRIPTION
プログラミング基礎 I( 再 ). 山元進. Lesson 8 の一部. クラス とは クラスの宣言 オブジェクトの作成 クラスのメンバー フィールド→変数・配列 メソッド メソッドとは メソッドの引数、戻り値. クラスとは. 変数の型を拡張したもの 例えば車のデータベース 車のメーカー、車種、登録番号などのデータ データベースの操作 (新規データのボタンなど) プログラムで使う部品の 仕様書 そのクラスのオブジェクトを作ると初めて 部品 になる 「継承」などの仕組みにより、カスタマイズが安全、簡単にできる → プログラミング基礎 II で学習. - PowerPoint PPT Presentation
Citation preview
プログラミング基礎 I( 再 )
山元進
Lesson 8 の一部 クラスとは クラスの宣言 オブジェクトの作成 クラスのメンバー
フィールド→変数・配列 メソッド
メソッドとは メソッドの引数、戻り値
クラスとは 変数の型を拡張したもの
例えば車のデータベース 車のメーカー、車種、登録番号などのデータ データベースの操作 (新規データのボタンなど)
プログラムで使う部品の仕様書 そのクラスのオブジェクトを作ると初めて部品にな
る 「継承」などの仕組みにより、カスタマイズが
安全、簡単にできる → プログラミング基礎II で学習
クラスを宣言する (p. 217) プログラム コードの中で、クラスを定義
する部分をクラスの宣言( declaration ) と呼ぶ
クラス中にはメンバがある メンバにはフィールドとメソッドがある
フィールドは、対象の性質を表す変数 メソッドは、対象の機能を表すコード
クラスの宣言は各メンバの宣言の集まり クラス内でクラスを宣言することも可能
クラスの宣言の構造class クラス名{
型名 フィールド名 ;…
戻り値の型 メソッド名 ( 引数リスト ){
文;…
return 式 ;}…}
クラスの宣言の例class Car{
int num;double gas;
}
この例は、フィールドだけをもつクラスの宣言
オブジェクトの作成 クラスの宣言は、プログラムで使う部品のひな形
(仕様書と思っても良い) 実際に使うためには、部品を製造する必要あり 作った部品 = オブジェクト , インスタンス オブジェクト作成の方法 変数 = new クラス名 (); 例
Car car1; // car1 は Car クラスのオブジェクトcar1 = new Car(); // car1 : 固有名詞のようなもの
メンバにアクセスする フィールドにアクセス
オブジェクトと結びつけられた変数名 . フィールド名
例 car1.num, car1.gas
フィールドは変数なので、前にオブジェクト名がついても、やはり変数として扱われる代入などができる ( 教科書 p.224, 図 8-5 参
照 )
クラスの利用 (p. 225)// 車クラスclass Car{ int num; double gas;}
class Sample1{ public static void main(String args[]) { Car car1; // 同じファイルで定義したクラスは (import せずに ) 使っても良い car1 = new Car();
car1.num = 1234; car1.gas = 20.5;
System.out.println(" 車のナンバーは " + car1.num + " です。 "); System.out.println(" ガソリン量は " + car1.gas + " です。 "); }}
補足2つ以上オブジェクトを作成しても良い
Car car1;car1 = new Car(); // Car object を作って
car1 と命名car1.num = 1234;car1.gas = 20.5;
Car car2;car2 = new Car(); car2.num = 2345;car2.gas = 30.5;
メソッドを定義する メソッド : クラスのメンバの一種 オブジェクトに作用して様々な機能を実現する 引数をとり、何か値を返すのが基本 例戻り値の型 メソッド名 ( 引数リスト ) // ここの引数リストに書かれるの
は仮引数{ 文 ; ・・・ return 式 ; // 呼び出し元に返す値を指定する}
void 型 void n. 空間 ; 空所 , 割れ目 ; 空虚(感) .
三省堂提供「 EXCEED 英和辞典」より メンバが値を返さない時は void 型にするvoid メソッド名 ( 引数リスト ){ 文 ; ・・・}
メソッドを呼び出す// 車クラスclass Car{ int num; double gas;
void show() // 車オブジェクトの ナンバー と ガソリンの量を標準出力に印字する { System.out.println(" 車のナンバーは " + num + " です。 "); // クラス内でメンバを利用する時は、メ
ンバ名だけで System.out.println(" ガソリン量は " + gas + " です。 "); // アクセスできる。 }}
class Sample2{ public static void main(String args[]) { Car car1; car1 = new Car();
car1.num = 1234; car1.gas = 20.5;
car1.show(); car1.show(); }}
// 車クラスの中で車クラスのメソッドを呼び出すclass Car{ int num; double gas;
void show() { System.out.println(" 車のナンバーは " + num + " です。 "); System.out.println(" ガソリン量は " + gas + " です。 "); } void showCar() { System.out.println(" これから車の情報を表示します。 "); show(); }}
class Sample3{ public static void main(String args[]) { Car car1; car1 = new Car();
car1.num = 1234; car1.gas = 20.5;
car1.showCar(); }}
メソッドの引数 例えば、ナンバーを設定するメソッドで
は、設定すべき番号を伝えてやる必要がある。必要な情報をメソッドに渡してやるのが引数
メソッドの定義に使うのは仮引数 実際にどんなものが渡されるかは分からない
が、名前がないと呼ぶのに困るので、仮名をつける
メソッドを呼出し時に実際に渡すのが実引数
// 車クラスclass Car{ int num; double gas;
void setNum(int n) // n は仮引数 { num = n; System.out.println(" ナンバーを " + num + " にしました。 ");
} void setGas(double g) { gas = g; System.out.println(" ガソリン量を " + gas + " にしました。 "); } void show() { System.out.println(" 車のナンバーは " + num + " です。 "); System.out.println(" ガソリン量は " + gas + " です。 "); }}
class Sample4{ public static void main(String args[]) { Car car1 = new Car();
car1.setNum(1234); // 1234 は実引数。必要に応じてどんな値にしても良いし、変数にしても良い。 car1.setGas(20.5); }}
メソッドの引数
補足 変数を実引数にする場合に、仮引数と名前が違っても良い。 ただし、型が同じである必要がある。 例class Sample4{ public static void main(String args[]) {
int number = 1234;double gasoline = 20.5;
Car car1 = new Car();
car1.setNum(number); car1.setGas(gasoline); }}
補足 (this) クラスの宣言の中では、メンバの前に何も指定しなくてもア
クセスできる そのメンバがフィールドでもメソッドでも
メソッドの定義中、呼び出される際のオブジェクト名の代わりに this というキーワードが使える
例 Sample4.java の setGas() の定義を以下の様にしても良い。
void setGas(double gas) { this.gas = gas; System.out.println(" ガソリン量を " + this.gas +
" にしました。 "); }
メソッドの引数(複数の場合)// 車クラスclass Car{ int num; double gas;
void setNumGas(int n, double g) { num = n; gas = g; System.out.println(" 車のナンバーを " + num + " にガソリン量を " + gas + " にしました。 ");
} void show() { System.out.println(" 車のナンバーは " + num + " です。 "); System.out.println(" ガソリン量は " + gas + " です。 "); }}
class Sample5{ public static void main(String args[]) { Car car1 = new Car();
int number = 1234; double gasoline = 20.5;
car1.setNumGas(number, gasoline); }}
メソッドの戻り値 メソッドの呼び出し元に戻す ( 返す ) 情報
エラー発生の通知、演算の結果、などなど 例えば車のナンバーを取得するメソッド
ナンバーは int 型だから、 int 型の値を返すようにするのが自然に思える
サンプルコードは次項
戻り値を持つメソッドの呼び出し
// 車クラスclass Car{ int num; double gas;
int getNum() // int 型のナンバーを返すという宣言 { System.out.println(" ナンバーを調べました。 "); return num; // 返す値を決める } double getGas() { System.out.println(" ガソリン量を調べました。 "); return gas; } void setNumGas(int n, double g) { num = n; gas = g; System.out.println(" 車のナンバーを " + num + " にガソ
リン量を " + gas + " にしました。 "); }
void show() { System.out.println(" 車のナンバーは " + num + " です。 "); System.out.println(" ガソリン量は " + gas + " です。 "); }}
class Sample6{ public static void main(String args[]) { Car car1 = new Car();
car1.setNumGas(1234, 20.5);
int number = car1.getNum(); double gasoline = car1.getGas();
System.out.println("サンプルから車を調べたところ "); System.out.println(" ナンバーは " + number + " ガソリン量は
" + gasoline + " でした。 "); }}
補足 戻り値は一つしか無い 呼び出し元では、戻り値を使わないで無視す
ることもできる 使う場合
int number = car1.getNum(); // number に戻り値を保存
使わないcar1.getNum(); // 戻り値は無視。何処にも保存され
ない。
クラスの設計 プログラムを設計するのに、扱う対象を分析
して記述するとうまく行くようだ → Object 指向 対象の性質 : コンピュータ上ではデータ 対象が持つ機能 : データに対する操作両者を合わせて定義するものがクラス
車のデータベースの例 ( 教科書 p216, 図 8-1) ナンバー、ガソリン量 → データ ( フィー
ルド ) ナンバー設定、ガソリン増減 → 操作 ( メソッ
ド )
演習課題 1 main メソッドを持つ class Report1 中に、
int num を仮引数とし、 int 型の戻り値として num の桁数を返すメソッド ketasuu を実装せよ。また、 main メソッドでは、キーボードから 0 以上の整数を読み取り int iNum に代入せよ。さらに、 iNum を実引数として ketasuu を呼び出し、戻り値を画面上に印字せよ。 ただし、 ketasuu は static である必要があるの
で、 static int ketasuu(int num)と宣言せよ
演習課題 2 main メソッドを持つ class Report2 中に、
int num を仮引数とし、 boolean 型の戻り値として num が素数であるかどうかを 返すメソッド sosuu を実装せよ。また、 main メソッドで 101 から 110 の整数を実引数として sosuu メソッドを呼び出し、それぞれの整数が素数であるか否かを書き出せ。 ただし、 sosuu は static である必要があるので、 static boolean sosuu(int num)と宣言せよ
演習問題3 (次のページに続く )
main メソッドを持つ Report3 クラスと同じファイル中に、次の仕様を満たす Student クラスを作成せよ。 以下の各フィールドを持つ
String name; String id; int mark; // mark : 点数のこと
以下のメソッドを持つ boolean passed()
mark >= 80 で true, それ以外で false String info()
name, id, mark をタブで区切った文字列を返す
演習問題3 ( 前のページからの続き ) main メソッド中に、 Student クラスの
変数 student を作成し、 name に自分の名前、 id に自分の学籍番号、 mark に中間試験の予想点数(各人が勝手に決めて良い)を入れよ。
main メソッド中で、 student.info(), student.passed() の戻り値を画面に印字せよ。