Java勉強中です。勉強したことをまとめてます!
#オブジェクト指向の概要
人が行なっている作業をシステム化する際、人や作業をオブジェクトとみなし、オブジェクト毎にシステム上で再現する事によって、システム開発をする人にとっても、分かり易いシステムを作成しようという考え方。
#オブジェクト指向の3大機能
・カプセル化:ある特定の相手からの、操作や変更を禁止する事
・継承:過去に作成した部品を参考に、新しい部品を作成する事
・多様性:似ている2つの部品を、同じ様なものとして、曖昧性を持たせて同様の扱いが出来る事。
#クラス・インスタンスの生成について
##クラスの作成について
(考え方)
・クラス名=ファイル名
・クラスでは対象物の属性・振る舞いを定義する。
(例〜StCharaクラスを作成する場合〜)
public class StChara {
String name;//属性
int focelevel;//属性
String status;//属性
void selfIndroduction() {//振る舞い
System.out.println("私の名前は" + this.name);
System.out.println("フォースレベルは" + this.focelevel);
System.out.println("ステータスは" + this.status);
}
}
##属性の定義
(考え方)
クラス内で変数を定義する事で、属性を定義する。
(例)
public class StChara {
String name;//名前属性
int focelevel;//フォースレベル属性
String status;//ステータス属性
(フィールドについて)
クラスブロック内で定義した変数 = フィールドとなる。
上記例の中では、以下のname
focelevel
status
がそれぞれフィールドに該当する。
(定数フィールドについて)
フィールドの先頭にfinal
を付けることで、変更出来ないフィールドにする事が出来る。
これを定数フィールド という。
定数フィールドの場合、変数名を大文字に設定する。
final int FOCELEVEL = 100;
##振る舞いの定義
(考え方)
振る舞いはメソッドを使って、定義する。
(例)
void selfIndroduction() {//自己紹介の振る舞い
System.out.println("私の名前は" + this.name);
System.out.println("フォースレベルは" + this.focelevel);
System.out.println("ステータスは" + this.status);
}
(補足)
this.変数名は自分自身のインスタンス上の変数であることを示している。
##クラス変数・インスタンスの生成について
(考え方)
クラスを定義する事で、そのクラスの属性・操作に対応したクラス変数が使用出来る様になる。
クラス変数にインスタンスを代入する事で、インスタンスを生成する。
(クラス変数の作成方法)
クラス名 クラス変数名;
(インスタンスの生成方法)
クラス名 クラス変数名 = new クラス名();
(例)※同時に実施する場合
StChara dath/*②*/ = new StChara();/*①*/
(補足)
①右辺にて、StChara
インスタンスを生成。
②左辺にてStChara
というクラスを用いて、dath
というクラス変数を作成。そこに①にて生成した、StChara
インスタンスを代入している。
③dath
というクラス変数に代入されたStChara
インスタンスが生成される。(以下:dathインスタンス
)
(例②)※同様にruku
というクラス変数に代入されたStChara
インスタンスを生成。(以下:rukuインスタンス
)
StChara ruku = new StChara();
#インスタンス毎の属性の値設定
(考え方)
クラスで定義した属性に対して、インスタンス毎のフィールド値を設定する。
(設定方法)
クラス変数名.変数名=値
(例〜dathインスタンスに値を設定する場合〜)
StChara dath = new StChara();
dath.name = "ダース・ベイダー";
dath.focelevel = 100;
dath.status = "暗黒卿";
(例〜rukuインスタンスに値を設定する場合〜)
StChara ruku = new StChara();
ruku.name = "ルーク・スカイウォーカー";
ruku.focelevel = 60;
ruku.status = "ジェダイの騎士";
(補足)
クラス変数名.
とする事で、どのクラス変数に代入されたインスタンスに対して、値を設定するか判断している。
#振る舞いの呼び出し
(考え方)
クラスに定義している、振る舞い(メソッド)を別のメソッドから呼び出す。
クラス変数名.メソッド名();
とする事で、宣言したクラス変数名に代入された、インスタンスから呼び出しを実施する。
(呼出方法)
クラス変数名.メソッド名();
(例〜dathインスタンスから呼び出した場合〜)
dath.selfIndroduction();//呼び出し
↓ 「呼び出し」
void selfIndroduction() {//自己紹介の振る舞い
System.out.println("私の名前は" + this.name);
System.out.println("フォースレベルは" + this.focelevel);
System.out.println("ステータスは" + this.status);
}
↓ 「インスタンス毎に設定されたフィールド参照」
StChara dath = new StChara();
dath.name = "ダース・ベイダー";//上記のthis.nameはここを参照
dath.focelevel = 100;//上記のthis.focelevelはここを参照
dath.status = "暗黒卿";//上記のthis.statusはここを参照
↓ 「出力」
私の名前はダース・ベイダー
フォースレベルは100
ステータスは暗黒卿
(補足)
クラス上でthis.変数名
とする事で、呼び出し元インスタンスのフィールド値を参照する。
(例②〜rukuインスタンスから呼び出した場合〜)
ruku.selfIndroduction();
↓ 「呼び出し」
void selfIndroduction() {//自己紹介の振る舞い
System.out.println("私の名前は" + this.name);
System.out.println("フォースレベルは" + this.focelevel);
System.out.println("ステータスは" + this.status);
}
↓ 「インスタンス毎に設定されたフィールド参照」
StChara ruku = new StChara();
ruku.name = "ルーク・スカイウォーカー";
ruku.focelevel = 60;
ruku.status = "ジェダイの騎士";
↓ 「出力」
私の名前はルーク・スカイウォーカー
フォースレベルは60
ステータスはジェダイの騎士
(補足)
今回は、rukuインスタンス
から呼び出したため、ruku
インスタンスのフィールドを参照した出力結果となる。