【Java初心者向け】オブジェクト指向を意識した九九表の実装

【Java初心者向け】for文とwhile文で九九表を作る方法の続きです。

お風呂に入っているときに、別の書き方を思いついたのでメモしておきます。
今回は、少しオブジェクト指向を意識した実装 になっています。

とはいえ、まだ オブジェクト指向を完全に理解しているわけではない ので、正しいかどうかは自信がありません…。
でも、クラスを new してインスタンス化したり、プロパティを使ったり しているので、なんとなくオブジェクト指向っぽいはず!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class For3 {
    private String kukuList = ""; // 九九表を格納するプロパティ

    public static void main(String[] args) {
        For3 object = new For3(); // For3のインスタンス化

        object.generateKuku(); // 九九表の作成
        object.render(); // 九九表の表示
    }

    // 九九表作成メソッド
    private void generateKuku() {
        for (int i = 1; i < 10; i++) {
            for (int j = 1; j < 10; j++) {
                if (i * j < 10) {
                    this.kukuList += "  " + (i * j); // 1桁の数値を揃える
                } else {
                    this.kukuList += " " + (i * j);
                }
            }
            this.kukuList += "\n"; // 改行
        }
    }

    // 九九表表示メソッド
    public void render() {
        System.out.print(this.kukuList);
    }

    // ゲッター
    public String getKukuList() {
        return this.kukuList;
    }
}

修正・改善したポイント

変数・メソッド名の修正

  • kuku_list → kukuList(Java の命名規則に合わせてキャメルケースに修正)
  • mulit → generateKuku(「作成」っぽい意味がわかるように)

バグの修正

  • mulit(int i) の 引数 i は不要 だったので削除
  • ¥n は \n に修正(Java では ¥ の表記は不要)
  • コードの読みやすさを向上
  • 九九表の数値が 見やすいようにスペースを調整
  • main() の処理を明確にするため、メソッドを整理

でも、main() で new してるのが気持ち悪い……?

コードを書いていて、main() の中で自分のクラスをインスタンス化しているのが気持ち悪い と感じました。
確かに main() メソッドは 静的メソッド (static) なので、本来インスタンスを作るのではなく、クラスメソッドで完結させるのがスッキリしそうです。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class For3 {
    private static String kukuList = ""; // static にしてクラス変数に変更

    public static void main(String[] args) {
        generateKuku(); // 九九表の作成
        render(); // 九九表の表示
    }

    // 九九表作成メソッド
    private static void generateKuku() {
        for (int i = 1; i < 10; i++) {
            for (int j = 1; j < 10; j++) {
                if (i * j < 10) {
                    kukuList += "  " + (i * j); // 1桁の数値を揃える
                } else {
                    kukuList += " " + (i * j);
                }
            }
            kukuList += "\n"; // 改行
        }
    }

    // 九九表表示メソッド
    public static void render() {
        System.out.print(kukuList);
    }
}

このようにすると、インスタンス化 (new) しなくても実行可能 になり、 main() で new For3() する必要がなくなります。

どちらの書き方が正しいかは目的次第 ですが、

  • オブジェクト指向っぽく書く → インスタンスを作成 (new) して this を使う
  • シンプルに書く → クラスメソッド (static) を使う

という使い分けができます。

まとめ

  • 九九表をオブジェクト指向っぽく書いてみた
  • 命名を修正して可読性を向上
  • main() でインスタンス化するのが気持ち悪い場合は static にする方法もアリ
  • オブジェクト指向を学ぶには、「何をインスタンスにするか?」を考えるのが大事

「オブジェクト指向っぽく書いたけど、これで合ってるのか?」という悩みは、Java を学び始めたばかりの人なら誰でも通る道です!
今回のコードも 厳密にはオブジェクト指向とは言い難い部分もありますが、「試しにやってみる」ことが大事 なので、どんどんコードを書いて理解を深めていきたいですね。

おすすめ記事

【Java初心者向け】for文とwhile文で九九表を作る方法
【Java初心者向け】基礎から学ぶキャスト(型変換)の重要ポイント

カテゴリ

comments powered by Disqus