第3回 Java基本技術講義
ク
構造と生成
クラス構造と生成
33クラスの概念
前回の基本文法でも少し出てきたが,オブジェクト指向プログラミ
ングは
_______
という概念をうまく活用した手法である.
C言語で言う 関数に似ているオブジェクト指向プログラミングはこれら状態と
振る舞いを持つオブジ クトの概念をソフトウ
クラス
いろんなプログラムで使いまわせる
振る舞いを持つオブジェクトの概念をソフトウェ
ア開発の中に適用し、様々な機能を実現する
34クラス=_________=いろんなプログラムで使いまわせる
クラスの概念
クラスの構成要素
クラスの構成要素をクラスのメンバ と呼ぶ
クラスの構成要素をクラスのメンバーと呼ぶ
オブジェクトが持っている状態を
オブジェクトが持っている状態を
表す.属性,クラス変数,フィール
ドともいう
メモリ上に実体を作る処理 初期
メモリ上に実体を作る処理.初期
化処理とも呼ばれる
オブジェクトの機能/働きを記述
機能
働 を記
してあり,オブジェクトを操作する
方法
i が含まれるオブジ クトはプ
mainが含まれるオブジェクトはプ
ログラムの最初に動作するメソッ
ドである
35クラスの生成
クラスを使ったプログラミング
最も簡単なクラスの利用はC言語関数のように呼び出して使う方法
最も簡単なクラスの利用はC言語関数のように呼び出して使う方法
public class Room { int capa = 40;p ; int fact = 36; void member() { System.out.println(“クラス実員は“+capa+”です”); }} }
public class RoomMain {
p {
public static void main(String[] args) {
Room T3 = newRoom(); //(1)オブジェクトT3の生成
System.out.println(“定員は”+T3.fact+”です”); //(2)変数teiinの参照
T3member() //(3)メソッドmemberの参照 T3.member(); //(3)メソッドmemberの参照 } } 36
関数と違うのは,他のクラスを
_____________________
して使うこと
クラスの生成
インスタンス化の手順
クラスは単なる
であり インスタンス化して初めてプログ
クラスは単なる_____________であり,インスタンス化して初めてプログ
ラムが使えるオブジェクトとなる
Room
T3
=
new
Room();
オブジ クトの初期化
オブジェクト変数の宣言
(
クラス名 オブジェクト変数)
元となるクラス
オブジェクトの初期化
(コンストラクタ名(初期化値))
中身を入れることで
元となるクラス
を_________
オブジェクトの生成
(new)
作る命令
中身を入れることで
_______している
37クラスの生成
クラス生成とメモリ上の動作
メモリ上の動作はC言語と同じ考え
int aaa = 31;メモリ上の動作はC言語と同じ考え
Int aaaaaa
メモリ
Int aaa =31
aaa
メモリ
intが入る
箱を作る
箱の名前
はaaa
11111
箱に中身
を入れる
Room T3 = new Room();
メモリ
メモリ
Room T3R
が入る
T3
メモリ
Room T3 =new Room capa member()T3
メモリ
箱に中身
Roomが入る
箱を作る
箱の名前
はT3
箱に中身
を入れる
38違うのは変数だけでなく,_____________もメモリ空間に入れる
クラスの利用
オブジェクトの参照
メモリ(プログラム) テンプレート メモリ(実行) memberメソッド 変数capa Roomクラス テンプレ ト 生成 実体 memberメソッド T3オブジェクトインスタンス化することにより,オブ
ジェクトが持つメンバ変数やメソッドを
変数capa 関連ジェクトが持つメンバ変数やメソッドを
使えるようになる
インスタンス化されたオブジェクトは
参照 T3.member() 参照 T3.capa I/F T3.member T3.capa RoomMainクラス System.out.println AAA.member 実行インスタンス化されたオブジェクトは
外部からのアクセスI/Fを持つ
メッセージオブジェクトとのアクセスをメッセージ
オブジェクトとのアクセスをメッセ ジ
と呼ぶ
39 http://www.geocities.jp/objectbrain/messagebrain.htmlクラスの利用
メンバ変数とメソッド
public class Room {
int capa = 40; int fact = 36; id b () {
オブジェクトが持っている状
態を保持する変数である.
通常は属性を示すアクセス
void member() { System.out.println(“クラス実員は“+fact+”です”); } }通常は属性を示すアクセス
演算子を伴うが,詳細は次
章で触れる
}オブジェクトの機能/働きを
担うものである.引数受けや
返値を
す機能もある
public class Room { int capa = 40;
返値を戻す機能もある.
int fact = 36; void member() { System.out.println(“欠員=”+calculate(capa, fact)); }当然,同じクラス内だけのや
り取りだけでなく インスタン
}int calculate(int x, int y) { int answer = x-y; return answer;
り取りだけでなく,インスタン
ス化されているものなら他の
クラスから呼ぶこともできる
40 } }クラスの利用
コンストラクタ
public RoomR { int capa = 40; int fact;様々なメンバ変数を持つオブ
ジェクトを生成する場合,コン
ストラクタの
を
RoomR( int x) { fact = x; }___________
利用する.
前までの例題のように とりわ
void member() { System.out.println(“クラス欠員=“+(capa-fact)); } }前までの例題のように,とりわ
け初期化の必要がない時,クラ
スにおけるコンストラクタの記述
は無くとも良い(自動で実行され
}public class RoomMainR {
public static void main(String[] args) { RoomR T3 = newRoomR(36);
は無くとも良い(自動で実行され
るが,値はNULLが入る)
パッケージ名:lec 004 RoomR T3 = new RoomR(36); T3.menber();
RoomR W3 = new RoomR(32); R3.menber(); パッケ ジ名:lec_004 メインクラス名:RoomMainR サブクラス名: RoomR RoomMainRとRoomRは 41 () } } lec_003から中身をコピーして 改造しなさい
クラスの利用
コンストラクタの区別
public RoomR { int capa = 40; int fact;コンストラクタは名前が同じで
も,その引数の違いによって
全く違う動作をする.
RoomR( int x) { fact = x; }違 動
便利である一方で,間違えや
すいので注意すること!
RoomR( ) { System.out.println(“全員います!“); }RoomR( int x int y) {
public class RoomMainR { RoomR( int x, int y) { capa = x;
fact = y;
System.out.println(“もともと“+(capa-fact))+”名い ません”)
public class RoomMainR {
public static void main(String[] args) { RoomR T3 = new RoomR(36); T3.menber();
ません”); }
void member() {
System.out.println(“クラス欠員=“+(capa-fact)); RoomR W3 = new RoomR(32);
R3.menber();
RoomR R3 = new RoomR(); RoomR A3 = newRoomR(38 32);
42 System.out.println( クラス欠員 (capa fact)); }
} RoomR A3 new RoomR(38,32); }