「スッキリわかるJava入門」でオブジェクト指向勉強中
初めに
スッキリわかるJava入門の第二部「オブジェクト指向を始めよう」を読んでいる途中で、自分なりに言語化して理解したいと思い、今回の記事を記述しています。
読み進めながら徐々に追記していきます。
初学者のすごく個人的な理解なので、ご指摘やアドバイス等頂けるとすごく嬉しいです!
(普段Flutterを使っているのでDartで記述します。)
オブジェクト指向とは
うまく説明はできないので、個人的な感想だけ記述します。。笑
オブジェクト指向と言われても全くピンときませんでしたが、今回本を読んで、
現実世界の関係性そのもの。なんだなあ〜と感じました笑
「現実世界を真似して仮想世界を作る」と書いてあって、マイクラとかシムシティーっぽいなと思ってググっていたら、色々記事がありました。
「私たち人間が慣れ親しみ、よく把握している現実世界をマネして作られたプログラムもまた、私たち人間にとって把握しやすいものだから」
だそうです。
クラスとインスタンス
自分自身が、ドラクエ的なRPGの世界の神だとする。
ワールドにキャラクターが居ないと面白くないので、キャラクターを大量に生み出したい。
しかし、1キャラクターごとに名前や職業、HP、使える技を決めて生み出していくのは、面倒だし時間がかかる。。
なので、テンプレ(クラス)を一つ作成し、
「名前」と「職業」だけをそれぞれのキャラクターに与えて、ポンポン生み出していく。
この生み出されたキャラクターがインスタンス。
クラスの定義
このクラスは、「フィールド(情報)」「コンストラクタ(インスタンス生成時に実行されるメソッド)」「メソッド(実行できる操作)」の3つを持っている。
【フィールド】
・名前、職業はキャラクター毎に異なる為初期値はなし。
・HPは全キャラクター共通なので、初期値は100。
【コンストラクタ】
・名前、職業に任意の値を代入する。
【メソッド】
・キャラクターが実行できる技を用意しておく。
「転ぶ」か「逃げる」
class Character{
//フィールドの定義(属性)
String name;
String job;
int hp = 100;
//コンストラクタの定義(インスタンス生成時に自動で実行される処理)
Character(this.name, this.job);
//メソッド(操作)
void slip() {
hp -= 5;
print("$nameは、転んだ!");
print("5のダメージ!");
}
void run() {
print("$nameは、逃げ出した!");
print("GAMEOVER");
}
}
フィールドの定義
「名前」「職業」「HP」の3つの情報を持ったキャラクターを沢山作りたい。
その為に、このCharacterというテンプレ(クラス)から生まれるキャラクター(インスタンス)は、
「name」と「job」と「hp」を持ちますよと宣言する。
HPは全キャラクター100にしたいので、初期値で定義しておく。
//フィールドの定義(情報)
String name;
String job;
int hp = 100;
コンストラクタの定義
定義したフィールドを元にキャラクターを生み出す際に、名前(name)と職業(job)を与えてあげなければいけないので、その作業をしてくれるコンストラクタを用意する。
//コンストラクタの定義(生成時に自動で実行される処理)
Character(this.name, this.job);
【コンストラクタの個人的な理解】
すごく難しそうな名前だが、インスタンスを生成した時に勝手に実行されるただの関数。
省略形で見る事が多いので、何をしているの分かりづらいが、
引数としてnameとjobを受け取り、Characterクラス内のnameとjobに代入しているだけ
//省略しない場合↓
Character(String name, String job) {
this.name = name;
this.job = job;
}
インスタンス生成
定義したCharacterクラスを利用して、キャラクター(インスタンス)を実際に生み出す。
この段階で初めて、ワールドにキャラクターが誕生する。
これで、Characterというテンプレに「名前」と「職業」を与えた「character1(勇者ケビン)」が誕生。
Character character1 = Character("ケビン", "勇者");
print(character1.name); //出力結果:ケビン
print(character1.job); //出力結果:勇者
print(character1.hp); //出力結果:100
技(メソッド)を使う
生成した「character1」はテンプレに記述していた技(メソッド)「転ける」と「逃げる」を使う事ができる。
character1.run(); //出力結果:ケビンは、逃げ出した! GAMEOVER
character1.slip(); //出力結果:ケビンは、転んだ! 5のダメージ!
進捗
次の章は「継承」
Discussion