オブジェクト指向(クラス)
オブジェクト指向とは…
オブジェクト指向とは、プログラムを設計するときの考え方の1つです。ただしあまり難しく考えずに「概念」として捉えてください。なぜならオブジェクト指向の捉え方には完全な正解がなく、教えてくれる人や参考書によって説明が異なるからです。
訳が分からず混乱して、「難しいものだ」という意識になってしまうぐらいなら、「だいたいこういうことか」という程度の理解に留めておき、あとは実践の中で理解を深めていくのが良いでしょう。
さてそもそも、オブジェクトとは物体や対象といった意味ですが、現実の世界に存在する物や概念を指す場合もあれば、そういった物や概念をモデルとして再現したもの、さらには現実世界には存在せずにモデル上のみ存在する物を指すこともあります。例えば、銀行口座や受付システム、ゲーム内のヒーローなどがあります。
もう少し掘り下げて説明すると、オブジェクトとはそれぞれ関連のあるデータと機能の集合と考えられ、オブジェクト指向ではオブジェクトを基本単位としています。 1つのオブジェクト内にはフィールドとメソッドが備わっています。ほんの一例ですが、フィールドに当てはまるものの例としてはString型の名前やint型の年齢などが挙げられます。メソッドの目的はオブジェクト内のフィールドを操作すること、プログラムの一連の処理をまとめたものと考えることができます。
クラスとは…
ほとんどのオブジェクト指向の言語にはクラスという仕組みがあります。 クラスには先ほど紹介したフィールドやメソッドが定義されています。つまりクラスというのはオブジェクトの設計図のようなものだと言えます。 したがってオブジェクトを作る際は必ずクラスを指定する必要があり、指定したクラスに定義されたデータとメソッドがオブジェクトに備わるという仕組みです。
ではここで少し、プログラミング言語でよく使われるJavaを用いてクラスを簡単に書いてみます。
Humanクラス(人間の設計図)
String name = "田中リョウタ"; (⇦フィールド:名前)
int age = 25; (⇦フィールド:年齢)
double weight;
void introduce() { (⇦メソッド:自己紹介を表示する)
System.out.println("私は" + name + "です。年齢は" + age + "歳です。");
}
}
String name = "ポチ";
double weight = 12.5;
void eat(){
System.out.println("ポチはドッグフードを食べている。");
}
}
オブジェクト指向を使ってみる
先ほどのHumanクラスやDogクラスのように登場する物をクラスごとに分けて作りましたが、それだけでは動かすことができません。これらを動かすためにはインスタンス化をする必要があります。
クラスが設計図、オブジェクトは型、その型からできるのがインスタンスであるという風に考えられます。
そしてインスタンス化をするためにはMainクラスが必要になります。
インスタンスの生成方法は クラス名 変数名 = new クラス名();です。
なので、先ほどのHumanクラスとDogクラスを生成すると…
public static void main(String[] args){
Human h = new Human ();
Dog d = new Dog ();
}
}
次にインスタンスのフィールドを利用する場合は、 変数名.フィールド名 = 値; と書きます。
では、具体的に見てみましょう。
public static void main(String[] args){
Human h = new Human ();
Dog d = new Dog ();
h.weight=55.5;
h.introduce();
System.out.println("私の体重は"+h.weight+"kgです。");
d.eat();
}
}
実行結果 … 私は田中リョウタです。年齢は25歳です。
私の体重は55.5kgです。
ポチはドッグフードを食べている。
最後に…
今回は簡単な内容を紹介しましたが、オブジェクト指向には他に「カプセル化」「継承」「多態性」といったものがあります。
例えば「カプセル化」のメリットはprivate修飾子を使うなど、修飾子を使い分けることでクラス内の内容を外部から変更できないようにしたり、変更できる相手の制限をすることができます。
また「継承」を使えば、元となるクラスから類似したクラスを作ることができます。例えば先ほどのHumanクラス(人間クラス)であれば、そこから生徒クラス、先生クラスなどを作ることができます。メリットは生徒クラス、先生クラスを全く分けて作っていた場合に共通の変更が発生するとどちらも変更するとしたら手間やミスにつながります。
しかし継承していればHumanクラスさえ変更してしまえばそれだけで完了します。
ただし人間クラスから犬クラスを継承しても、人間と犬は違いが多いので上手く機能しなくなるので注意が必要です。
このようなメリットがあるので、オブジェクト指向を学習するのはプログラミングを効率よくミスなく進めていくために必要ですので、今は難しくてくじけそうでも続けて行きましょう!