• 検索結果がありません。

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

N/A
N/A
Protected

Academic year: 2021

シェア "プログラミング基礎I(再)"

Copied!
27
0
0

読み込み中.... (全文を見る)

全文

(1)
(2)

クラスとは

クラスの宣言

オブジェクトの作成

クラスのメンバー

フィールド

→変数・配列

メソッド

メソッドとは

メソッドの引数、戻り値

(3)

変数の型を拡張したもの

例えば車のデータベース

車のメーカー、車種、登録番号などのデータ

データベースの操作 (新規データのボタンなど)

プログラムで使う部品の

仕様書

そのクラスのオブジェクトを作ると初めて

部品

になる

「継承」などの仕組みにより、カスタマイズが安全、

簡単にできる

→ プログラミング基礎IIで学習

(4)

プログラム コードの中で、

クラス

を定義する部

分をクラスの宣言(

declaration) と呼ぶ

クラス中には

メンバ

がある

メンバには

フィールド

メソッド

がある

フィールドは、対象の性質を表す変数

メソッドは、対象の機能を表すコード

クラスの宣言は各メンバの宣言の集まり

クラス内でクラスを宣言することも可能

(5)

class クラス名

{

型名 フィールド名

;

戻り値の型 メソッド名

(引数リスト)

{

文;

return 式;

}

}

(6)

class Car

{

int num;

double gas;

}

この例は、フィールドだけをもつクラスの宣言

(7)

クラスの宣言は、プログラムで使う部品のひな形

(仕様書と思っても良い)

実際に使うためには、部品を製造する必要あり

作った部品

=

オブジェクト

,

インスタンス

オブジェクト作成の方法

変数

= new クラス名();

Car car1; // car1 は Car クラスのオブジェクト

car1 = new Car(); // car1 : 固有名詞のようなも

(8)

フィールドにアクセス

オブジェクトと結びつけられた変数名

.フィールド名

car1.num, car1.gas

フィールドは変数

なので、前にオブジェクト名

がついても、やはり変数として扱われる

代入などができる

(教科書 p.224, 図8-5 参照)

(9)

// 車クラス

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 + "です。");

}

}

(10)

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;

(11)

メソッド

: クラスのメンバの一種

オブジェクトに作用して様々な機能を実現する

引数をとり、何か値を返すのが基本

戻り値の型 メソッド名

(引数リスト)

// ここの引数リストに書かれるのは

仮引数

{

;

・・・

return 式; // 呼び出し元に返す値を指定する

}

(12)

void n. 空間; 空所, 割れ目; 空虚(感).

三省堂提供「

EXCEED 英和辞典」より

メンバが値を返さない時は

void 型にする

void メソッド名(引数リスト)

{

;

・・・

}

(13)

// 車クラス 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(); } }

(14)

// 車クラスの中で車クラスのメソッドを呼び出す 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(); }

(15)

例えば、ナンバーを設定するメソッドでは、設

定すべき番号を伝えてやる必要がある。必要

な情報をメソッドに渡してやるのが

引数

メソッドの定義に使うのは

仮引数

実際にどんなものが渡されるかは分からないが、

名前がないと呼ぶのに困るので、仮名をつける

メソッドを呼出し時に実際に渡すのが

実引数

(16)

// 車クラス 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);

} }

(17)

変数を実引数にする場合に、仮引数と名前が違っても良い。

ただし、型が同じである必要がある。

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);

}

(18)

クラスの宣言の中では、メンバの前に何も指定しなくてもアクセ

スできる

そのメンバがフィールドでもメソッドでも

メソッドの定義中、呼び出される際のオブジェクト名の代わりに

this というキーワードが使える

Sample4.java の setGas() の定義を以下の様にしても良

い。

void setGas(double gas)

{

this.gas = gas;

System.out.println("ガソリン量を" + this.gas + "にしまし

た。

");

(19)

// 車クラス 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); }

(20)

メソッドの呼び出し元に戻す

(返す)情報

エラー発生の通知、演算の結果、などなど

例えば車のナンバーを取得するメソッド

ナンバーは

int 型だから、int 型の値を返すよう

にするのが自然に思える

サンプルコードは次項

(21)

// 車クラス 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 + "でした。");

} }

(22)

戻り値は一つしか無い

呼び出し元では、戻り値を使わないで無視するこ

ともできる

使う場合

int number = car1.getNum(); // number に戻り値を保存

使わない

(23)

プログラムを設計するのに、扱う対象を分析して

記述するとうまく行くようだ

→ Object 指向

対象の性質

: コンピュータ上ではデータ

対象が持つ機能

: データに対する操作

両者を合わせて定義するものがクラス

車のデータベースの例

(教科書 p216, 図8-1)

ナンバー、ガソリン量

→ データ (フィールド)

ナンバー設定、ガソリン増減

→ 操作(メソッド)

(24)

main メソッドを持つ class Report1 中に、

int num を仮引数とし、 int 型の戻り値として

num の桁数を返すメソッド ketasuu を実装

せよ。また、

main メソッドでは、キーボードか

0以上の整数を読み取り int iNum に代入

せよ。さらに、

iNum を実引数として ketasuu

を呼び出し、戻り値を画面上に印字せよ。

ただし、

ketasuuは static である必要があるので、

static int ketasuu(int num)

と宣言せよ

(25)

main メソッドを持つ class Report2 中に、

int num を仮引数とし、 boolean 型の戻り値

として

num が素数であるかどうかを 返すメ

ソッド

sosuu を実装せよ。また、main メソッド

101 から 110 の整数を実引数としてsosuu

メソッドを呼び出し、それぞれの整数が素数で

あるか否かを書き出せ。

ただし、

sosuuは static である必要があるので、

static boolean sosuu(int num)

と宣言せよ

(26)

main メソッドを持つ Report3 クラスと同じ

ファイル中に、次の仕様を満たす

Student ク

ラスを作成せよ。

以下の各フィールドを持つ

String name;

String id;

int mark; // mark : 点数のこと

以下のメソッドを持つ

boolean passed()

mark >= 80 で true, それ以外で false

String info()

(27)

main メソッド中に、Student クラスの変数

student を作成し、name に自分の名前、id

に自分の学籍番号、

mark に中間試験の予

想点数(各人が勝手に決めて良い)を入れよ。

main メソッド中で、student.info(),

student.passed() の戻り値を画面に印字せ

よ。

参照

関連したドキュメント

手動のレバーを押して津波がどのようにして起きるかを観察 することができます。シミュレーターの前には、 「地図で見る日本

基準の電力は,原則として次のいずれかを基準として決定するも

○齋藤部会長 ありがとうございました。..

としても極少数である︒そしてこのような区分は困難で相対的かつ不明確な区分となりがちである︒したがってその

これからはしっかりかもうと 思います。かむことは、そこ まで大事じゃないと思って いたけど、毒消し効果があ

○安井会長 ありがとうございました。.

では恥ずかしいよね ︒﹂と伝えました ︒そうする と彼も ﹁恥ずかしいです ︒﹂と言うのです