🗂

「スッキリわかるJava入門」でオブジェクト指向勉強中

2023/03/10に公開

初めに

スッキリわかるJava入門の第二部「オブジェクト指向を始めよう」を読んでいる途中で、自分なりに言語化して理解したいと思い、今回の記事を記述しています。
読み進めながら徐々に追記していきます。
初学者のすごく個人的な理解なので、ご指摘やアドバイス等頂けるとすごく嬉しいです!
(普段Flutterを使っているのでDartで記述します。)

オブジェクト指向とは

うまく説明はできないので、個人的な感想だけ記述します。。笑
オブジェクト指向と言われても全くピンときませんでしたが、今回本を読んで、
現実世界の関係性そのもの。なんだなあ〜と感じました笑
「現実世界を真似して仮想世界を作る」と書いてあって、マイクラとかシムシティーっぽいなと思ってググっていたら、色々記事がありました。
https://note.com/tokitky/n/n6e70d7e7a236
https://matsumotoyoshio.wordpress.com/2017/05/05/マインクラフトはオブジェクト指向プログラミン/

「私たち人間が慣れ親しみ、よく把握している現実世界をマネして作られたプログラムもまた、私たち人間にとって把握しやすいものだから」
だそうです。

クラスとインスタンス

自分自身が、ドラクエ的な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