こんにちは!ISAMU(@burlesca_isa)です!
今回はjavaのオブジェクト指向学習のコツを解説します。
この記事はある程度オブジェクト指向を勉強した方向けの記事です。
全く触れたことがない方はこちらの記事をどうぞ。
[nlink url=”https://kajirinyo.com/java_course_10/”]オブジェクト指向学習のコツを解説します
オブジェクト指向の勉強を進めていくコツとして、
覚えたほうが良い最重要項目があります。
継承やカプセル化というものがありますが、初心者にとってつまずきやすいです。
しかし、下記のことを覚えることで圧倒的に理解出来るようになります。
- クラスとインスタンスの関係性を図で思い描けるようになること
- メインメソッドを持っているクラスは必ず存在し、プログラムの中心であること
- オブジェクト指向で頻出する重要な用語を知る
クラスやインスタンスとは何かを図で思い描けるようになること
まずはざっくりとクラスやインスタンスの関係を図で理解できるようにしましょう。
クラスを学習する際によく例えられるのが「金型」です。
例えば、たい焼きは金型に素材を流し込むことで大量生産が可能です。
大量生産した「たい焼き」一つ一つのことをインスタンスと呼びます。
たい焼きインスタンスの味をあんこやクリームなどで作成することもできます。
インスタンスを作成し「あんこ」や「クリーム」などの情報を渡すことにより、様々な味のたい焼きを作成することが可能になります。
図では人間クラスを作成して、
佐藤さんや田中さんなど、個人のインスタンスを作成しています。
たい焼きの例では引数にあんこやクリームを与えることで、
味を変えるといいましたが、
人間で例えると、人間インスタンスが生まれた後、「名前」や「性別」などの情報を与えることにより、佐藤インスタンスや田中インスタンスにすることが出来ます。
メインメソッドを持っているクラスは必ず存在し中心であること
Javaを学習してきた方なら、
クラス宣言やメインメソッドをプログラムで記述してきたと思います。
メインメソッドはすべてのプログラムの中心になります。
そして、メインメソッドが書かれているクラスがファイル名になります。
class SampleMain{
public static void main(String[] args){
System.out.println("test");
}
}
この場合はSampleMain.javaというファイル名になります。
オブジェクト指向の場合は複数のクラスを記述することになります。
メインメソッドが書かれているクラスが、
プログラムの中心であることを頭に入れておきましょう。
クラスの書き方
クラス宣言構文
class クラス名
クラスを書く上でよくある間違いとして、
クラスの中に入れ子でクラス宣言をしてしまうことがあります。
クラスは金型なので、金型の中に金型は入れませんよね。
例えば、メインメソッドが記述されているクラスのブロックが閉じられている後にクラス宣言を記述します。
クラスはあくまでも金型なので、
基本的にはクラスを入れ子で書くことはありません。
フィールド・メンバ・インスタンス変数・ローカル変数などの概念
フィールド・メンバ・インスタンス変数・ローカル変数が何かをしっかりと理解することが重要です。
フィールド
クラス直下のブロックに記載されている変数が書かれている範囲
メソッドは含まれません。
メンバ
クラス直下に記載されている変数やメソッドのこと。
フィールドは範囲で、メンバは変数やメソッドのことです。
変数は「メンバ変数」とも呼ばれます。
インスタンス変数
クラス直下に書かれている変数です。
メンバ変数はインスタンス変数の上位概念のようなものです。
メンバ変数には2種類あります。
それがインスタンス変数とstatic変数です。
static変数は変数宣言でstatic String nameなど、staticと記載されているのですぐに分かりますが、
一気に覚えると大変なので、頭の片隅に置いておきましょう。
ローカル変数
メソッドのブロック内に書かれている変数のことです。
ソースコードを見て、これらの概念を呼び分けられることが重要です。
クラス直下にかかれている変数はメンバ変数のインスタンス変数という種類であること、
メソッド内に書かれている変数はローカル変数。
これらはフィールド内に書かれている、ということをすぐに思い描けるようにしましょう。
これらの用語は頻発するので、
分別出来るようにしておかないと学習を進めていく上で混乱してしまいます。
サンプルプログラム
3行目でHumanクラスをインスタンス化しています。
インスタンス化するにはnewを使用します。
インスタンス作成 構文
クラス名 インスタンス名 = new クラス名(引数);
今回は11行目でHumanクラスを定義したので、
クラス名にはHumanと記載します。
インスタンス名は佐藤インスタンスを作成したいのでsatoとしました。
インスタンス変数 構文
インスタンス名.インスタンス変数名 = 値;
4〜7行目でインスタンス変数に値を代入しています。