0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Javaのカプセル化を「たい焼き器」で考える

0
Posted at

カプセル化とは? — オブジェクト指向の基本をやさしく理解する

カプセル化の目的

  • カプセル化(Encapsulation)は、「データと処理をひとまとめにして、外部から直接触れないようにする」仕組みです。
  • オブジェクト指向の三大要素(カプセル化・継承・多態性)の中でも、最も基礎的な考え方です。

たい焼き器でたとえるカプセル化

たい焼き器を「オブジェクト」と考えてみましょう。

要素 たい焼き器の例 プログラムでの対応
データ あんこ・生地の量 クラスのフィールド(変数)
メソッド 焼く・型に流す・取り出す クラスのメソッド(関数)
外部操作 ボタンを押す・タイマーを設定する メソッド呼び出し
内部処理 温度制御・焼き加減の調整 privateメソッドや内部ロジック
  • 外から見えるのは「焼くボタン」だけ
  • 中で何度で焼いているか、どんな順番で生地を流しているかは見えない
  • 材料の量(生地・あんこ)は勝手に触れない
  • 必要なら「材料の残量を確認する窓(getter)」だけ用意する
  • 材料を補充する場合も「補充口(setter)」を通す

つまり、
外部は“決められた操作だけ”を使い、内部の状態は勝手に触れない
という仕組みがカプセル化です。

Javaで実装する「たい焼き器のカプセル化

java TaiyakiMaker.java
public class TaiyakiMaker {
    // データ(内部状態)は private で隠す
    private int batterAmount = 100; // 生地
    private int ankoAmount = 50;    // あんこ

    // 外部に公開するメソッド(たい焼きを焼く)
    public void bake() {
        if (batterAmount >= 10 && ankoAmount >= 5) {
            batterAmount -= 10;
            ankoAmount -= 5;
            System.out.println("たい焼きを焼きました!");
        } else {
            System.out.println("材料が足りません。");
        }
    }

    // getter(残量を確認する)
    public int getBatterAmount() {
        return batterAmount;
    }

    public int getAnkoAmount() {
        return ankoAmount;
    }

    // setter(材料を補充する)
    public void setBatterAmount(int amount) {
        if (amount >= 0) {
            this.batterAmount = amount;
        }
    }

    public void setAnkoAmount(int amount) {
        if (amount >= 0) {
            this.ankoAmount = amount;
        }
    }

    // 内部処理(外部から直接呼べない)
    private void adjustTemperature() {
        System.out.println("温度を自動調整中...");
    }
}

getter/setter を使う理由

1.勝手にデータを書き換えられない

taiyakiMaker.batterAmount = -999; // ← こういう事故を防げる
//バターの量がマイナスはあり得ない

2.値のチェックを挟める

  • setter の中で「0以上か?」などのバリデーションができる。

3.内部構造を変えても外部コードが壊れない

  • フィールド名を変えても、getter/setter の契約を守れば外部は影響を受けない。

カプセル化のメリットまとめ

メリット 説明
安全性 不正な値の代入を防げる
保守性 内部構造を自由に変更できる
拡張性 setter 内でログ・通知・計算などを追加できる
可読性 「何を公開しているか」が明確になる

まとめ

  • カプセル化は「たい焼き器の内部を隠す」イメージ
  • データは private で守る
  • 外部は getter/setter や公開メソッドを通してのみ 操作する
  • 内部処理は自由に変更でき、外部に影響を与えない
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?