はじめに
自分なりのクラスとインスタンスについてのイメージを語ってみようと思います。私がよく使っているJavaを題材にします。
私は最初オブジェクト指向をたい焼き機とたい焼きの関係で理解したのでそれを例えとします。なぜこのような例えを用いるのかは、私的には専門的な言葉の定義をイメージなしで語るのはいまいち理解しにくいと思うからです。
自分なりの大まかな定義
- インスタンスは「モノ」
→ たい焼き - クラスはモノをつくる「マシン」
→ たい焼き機 - 動的メソッドは「モノに対する操作」
→ たい焼きを焼く、食べるなどの動作 - 静的メソッドは「マシンの操作」
→ たい焼き機のボタン - 動的変数は「モノの状態」
→ たい焼きの具材、大きさなど - 静的変数は「マシンの共有」
→ たい焼きの個数など - コンストラクタは「モノをつくる最初の工程」
→ たい焼きを作り始めるときの処理
コードにしてみると
たい焼きのクラスをつくってみます。
具材、大きさを入れるための動的変数(インスタンスの変数)を用意します。
public class Taiyaki {
// たい焼きの具材
public String ingredient;
// たい焼きの大きさ
private int size;
// コンストラクタ (たい焼きを作る)
public Taiyaki(int size) {
this.size = size;
}
// たい焼きの具材をセットするメソッド
public void setIngredient(String ingredient) {
this.ingredient = ingredient;
}
// たい焼きの大きさを返すメソッド
public int getSize() {
return size;
}
}
// メイン関数 (Java23以降から利用できる書き方)
void main() {
// インスタンス化 → たい焼きを生成する
var taiyaki = new Taiyaki(2);
// インスタンスを操作する(動的メソッド呼び出し)
taiyaki.setIngredient("あんこ");
// 具材:あんこ, 大きさ: 2と出力される
println("具材:" + taiyaki.ingredient + ", 大きさ:" + taiyaki.getSize());
}
静的メソッド、静的変数も使うと
上記のコードにたい焼き(インスタンス)の数を保存してみる。
public class Taiyaki {
// 作成したたい焼き(インスタンス)の個数
private static int count;
// 作成したたい焼き(インスタンス)の個数を返すメソッド
public static int getCount() {
return count;
}
public Taiyaki(int size) {
this.size = size;
count++;
}
(以下略...)
}
上記のものを絵で表現してみる
静的変数、静的メソッド、クラス、インスタンスを以下のように表現してみた。
さいごに
これらはクラス、インスタンスがいまいちよくわからない人のために書いた記事であくまでイメージです。
私も最初の頃はまったくの独学だったので静的(static付き)と動的の違いがわかりませんでした。やっているうちにわかってきたという感じです。