クラスが必要な理由
Javaの世界はクラスとオブジェクトで構成されている。それほどクラスとオブジェクトという概念は重要である。しかし、クラスとオブジェクトはあまりにも多くの内容を含んでいるため、一度に理解するのは容易ではない。 ここでは、クラスとオブジェクトという概念がなぜ必要なのか、クラスがどのような方式で発展し作られたのかを段階的に学んでいく。
✅ 問題:生徒情報出力プログラムを作る
2人の生徒情報を出力するプログラムを作成してみよう。各生徒は名前、年齢、成績を持っている。
✓ 要件は
2人目の生徒の名前は「学生2」、年齢は16、成績は80です。
各生徒の情報を次のような形式で出力する必要があります。
名前: [名前] 年齢: [年齢] 成績: [成績]
変数を使って生徒情報を保存し、変数を使って生徒情報を出力する必要があります。
✓ 出力例:
名前: 学生1 年齢: 15 成績: 90
名前: 学生2 年齢: 16 成績: 80
✏️ ClassStart1 — 変数の使用
package class1;
public class ClassStart1 {
public static void main(String[] args) {
String student1Name = "学生1";
int student1Age = 15;
int student1Grade = 90;
String student2Name = "学生2";
int student2Age = 16;
int student2Grade = 80;
System.out.println("名前: " + student1Name + " 年齢: " + student1Age + " 成績: " + student1Grade);
System.out.println("名前: " + student2Name + " 年齢: " + student2Age + " 成績: " + student2Grade);
}
}
生徒2人を扱う必要があるため、それぞれ異なる変数を使用した。このコードの問題は、生徒が増えるたびに変数を追加で宣言しなければならず、また出力するコードも追加しなければならないことである。
✅ 問題:前の問題に配列を使おう
✏️ ClassStart2
package class1;
public class ClassStart2 {
public static void main(String[] args) {
String[] studentNames = {"学生1", "学生2"};
int[] studentAges = {15, 16};
int[] studentGrades = {90, 80};
for (int i = 0; i < studentNames.length; i++) {
System.out.println("名前: " + studentNames[i] + " 年齢: " + studentAges[i] + " 成績: " + studentGrades[i]);
}
}
}
配列を使用したおかげで、生徒が追加されても配列に生徒のデータを追加するだけで済む。もう変数を追加する必要がなく、出力部分のコードもそのまま維持できる。 ✓ 生徒追加前
String[] studentNames = {"学生1", "学生2"};
int[] studentAges = {15, 16};
int[] studentGrades = {90, 80};
✓ 生徒追加後
java
String[] studentNames = {"学生1", "学生2", "学生3", "学生4", "学生5"};
int[] studentAges = {15, 16, 17, 10, 20};
int[] studentGrades = {90, 80, 70, 60, 50};
✅ 配列使用の限界
配列を使用してコードの変更を最小化することには成功したが、1人の生徒のデータがstudentNames[]、studentAges[]、studentGrades[]という3つの配列に分かれている。したがって、データを変更する際には非常に注意して作業しなければならない。 ✏️ 学生2を削除
String[] studentNames = {"学生1", "学生3", "学生4", "学生5"};
int[] studentAges = {15, 17, 10, 20};
int[] studentGrades = {90, 70, 60, 50};
1人の生徒のデータが3つの配列に分かれているため、3つの配列をそれぞれ変更しなければならない。そして1人の生徒のデータを管理するために、3つの配列のインデックスの順序を常に正確に合わせなければならない。このようにすると、特定の生徒のデータを変更する際にミスをする可能性が非常に高い。
✅ まとめ
今のように名前、年齢、成績をそれぞれ別々に管理するのは、人間が管理しやすい方式ではない。 人間が管理しやすい方式は、生徒という概念を1つにまとめることである。そして各生徒ごとに自分の名前、年齢、成績を管理することである。
Discussion