2日目のゴール
2日目のテーマは
「クラスを“ただの箱”ではなく、“役割を持った登場人物”として設計できるようになること」 です。
1日目でやったのは、
Person というクラスを作る
main の中で Person を new して使う
「クラス=設計図」「main=司令塔」というイメージを持つ
というところまででした。
2日目ではここから一歩進んで、
クラスに「役割」をちゃんと持たせる
main に書きすぎないで、クラス側に仕事を渡す
クラス同士を「会話させる」イメージを持つ
ここを、具体的な例を通して固めていきます。
復習:1クラス+main の最小構成をもう一度
Person と Main の関係を言葉で説明できるか
まずは、昨日の形をもう一度確認します。
public class Person {
String name;
int age;
void introduce() {
System.out.println("こんにちは、" + name + "です。年齢は" + age + "歳です。");
}
}
Javapublic class Main {
public static void main(String[] args) {
Person p1 = new Person();
p1.name = "太郎";
p1.age = 20;
Person p2 = new Person();
p2.name = "花子";
p2.age = 25;
p1.introduce();
p2.introduce();
}
}
Javaこの構成を、自分の言葉で説明できるかが大事です。
Person は「人」という概念を表すクラス。
名前と年齢というデータと、「自己紹介する」という動きを持っている。
Main の main メソッドは「アプリのスタート地点」であり、「司令塔」。
Person を作って、値を入れて、メソッドを呼ぶ役割を持っている。
今日は、この「Person 1クラス」から、
もう少しクラスを増やしていきます。
クラスの役割を「一言で言えるか」が超重要
「このクラスは何を担当しているの?」と聞かれたときに答えられるか
良いクラス設計かどうかは、
そのクラスを一言で説明できるかどうかで、かなり分かります。
例えば、
Person … 人を表すクラス
Shop … お店を表すクラス
Calculator … 計算を担当するクラス
のように、「〜を表す」「〜を担当する」と言えるのが理想です。
逆に、
Util
Helper
Manager
みたいな名前だけが増えていくと、
「結局このクラス何してるの?」となりがちです。
2日目では、
クラスを増やすときに必ず「このクラスの役割は一言で言うと何?」と自分に問いかけてみてください。
例題:Person と Greeting クラスに分けてみる
「挨拶の言い方」を別クラスにしてみる
昨日の Person は、自分で挨拶していました。
void introduce() {
System.out.println("こんにちは、" + name + "です。年齢は" + age + "歳です。");
}
Javaここで、あえて「挨拶の文言を作る役」を別クラスにしてみます。
public class Greeting {
String createIntroduction(String name, int age) {
return "こんにちは、" + name + "です。年齢は" + age + "歳です。";
}
}
Javapublic class Person {
String name;
int age;
}
Javapublic class Main {
public static void main(String[] args) {
Person p1 = new Person();
p1.name = "太郎";
p1.age = 20;
Person p2 = new Person();
p2.name = "花子";
p2.age = 25;
Greeting greeting = new Greeting();
String msg1 = greeting.createIntroduction(p1.name, p1.age);
String msg2 = greeting.createIntroduction(p2.name, p2.age);
System.out.println(msg1);
System.out.println(msg2);
}
}
Javaここでの役割分担を整理します。
Person
「人の情報(名前・年齢)」だけを持つクラス。
動きは持たず、純粋にデータの箱として使っている。
Greeting
「挨拶文を作る」ことだけを担当するクラス。
名前と年齢を受け取って、文言を組み立てて返す。
Main
Person を作る
Greeting を作る
Greeting に Person の情報を渡して、メッセージを作ってもらう
最後に画面に出す
このように、
「誰が何を担当するか」を意識してクラスを分けるのが、
クラス分割の第一歩です。
main に書きすぎると何がつらくなるか
すべてを main でやろうとすると“神様メソッド”になる
もし、Greeting クラスを作らずに、
全部 main に書き続けるとどうなるかを想像してみましょう。
人が3人、5人、10人と増える
挨拶の文言を変えたくなる
「敬語バージョン」「カジュアルバージョン」を切り替えたくなる
全部 main に書いていると、
main がどんどん長くなり、
「どこを直せばいいのか分からない巨大メソッド」になります。
クラス分割の目的は、
「main をスリムにして、役割ごとにクラスに仕事を渡すこと」 です。
2日目では、
「これは本当に main がやるべき仕事か?」
と自分に問いかける癖をつけてみてください。
例題:Person に「Greeting を使わせる」パターン
main をさらにスリムにしてみる
さっきは main が Greeting を直接使っていましたが、
今度は Person に「挨拶してもらう」形に戻しつつ、
中で Greeting を使わせてみます。
public class Greeting {
String createIntroduction(String name, int age) {
return "こんにちは、" + name + "です。年齢は" + age + "歳です。";
}
}
Javapublic class Person {
String name;
int age;
Greeting greeting;
void introduce() {
String msg = greeting.createIntroduction(name, age);
System.out.println(msg);
}
}
Javapublic class Main {
public static void main(String[] args) {
Greeting greeting = new Greeting();
Person p1 = new Person();
p1.name = "太郎";
p1.age = 20;
p1.greeting = greeting;
Person p2 = new Person();
p2.name = "花子";
p2.age = 25;
p2.greeting = greeting;
p1.introduce();
p2.introduce();
}
}
Javaここでの関係を深掘りします。
Greeting
「挨拶文を作る」ことだけに集中しているクラス。
Person
「人の情報を持ち、挨拶するときは Greeting に文言を作ってもらう」クラス。
自分で文言を組み立てず、「挨拶の専門家」に任せている。
Main
Greeting を1つ作る
Person を2人作る
それぞれに Greeting を渡す
あとは introduce() を呼ぶだけ
この形になると、
main は「登場人物を用意して、関係をつなぐ」だけの役割になります。
これが、
「main は司令塔であり、ロジックの本体はクラス側に寄せる」
という設計のイメージです。
2日目のミニアプリ:挨拶スタイル切り替えアプリ
仕様を言葉で決める
最後に、少しだけ“アプリっぽく”してみます。
Person クラス … 人の情報を持つ
Greeting クラス … 挨拶文を作る
Greeting は「普通」と「敬語」を切り替えられる
main でスタイルを選んで、Person に挨拶させる
コードを書いてみます。
public class Greeting {
String style; // "normal" または "polite"
String createIntroduction(String name, int age) {
if ("polite".equals(style)) {
return "はじめまして、" + name + "と申します。" + age + "歳です。よろしくお願いいたします。";
} else {
return "こんにちは、" + name + "です。年齢は" + age + "歳です。";
}
}
}
Javapublic class Person {
String name;
int age;
Greeting greeting;
void introduce() {
String msg = greeting.createIntroduction(name, age);
System.out.println(msg);
}
}
Javapublic class Main {
public static void main(String[] args) {
Greeting greeting = new Greeting();
greeting.style = "polite"; // "normal" に変えるとカジュアルになる
Person p1 = new Person();
p1.name = "太郎";
p1.age = 20;
p1.greeting = greeting;
Person p2 = new Person();
p2.name = "花子";
p2.age = 25;
p2.greeting = greeting;
p1.introduce();
p2.introduce();
}
}
Javaここでのポイントは、
挨拶スタイルの切り替えは Greeting の役割
Person は「誰かに挨拶文を作ってもらう」だけ
main は「どのスタイルを使うか」を決めて、登場人物をつなぐだけ
という役割分担になっていることです。
2日目で絶対に押さえてほしい本質
今日いちばん大事なのは、
クラスと main の関係をこう説明できることです。
クラスは「役割を持った登場人物」
データと、そのデータに関する処理をセットで持つ。
「このクラスは何を担当しているのか?」を一言で言えるのが理想。
main は「アプリのスタート地点」であり「司令塔」
クラスを new して、必要な関係をつないで、メソッドを呼ぶ。
自分で全部やるのではなく、「クラスたちに仕事を振る」立場。
そして、
main にロジックを書きすぎると、すぐに限界が来る
「これは本当に main の仕事か?」と考え、クラス側に移せないかを考える
この感覚が入っていれば、
3日目以降の「クラスをどう分割するか」「どこまで責任を持たせるか」が、
ぐっと理解しやすくなります。
次は、Person や Greeting 以外の題材(例えば「商品」「注文」「計算機」など)でも、
同じように「役割を決めてクラスを分ける」練習をしていこう。
もう、クラスは“怖いもの”じゃなくて、“自分で動かせる道具”になり始めてるよ。

