オブジェクト指向「カプセル化」とは何か

現在のカリキュラムでは、

  • クラスとオブジェクト
  • メソッド
  • static
  • 値型と参照型
  • List
  • LINQ
  • Windowsフォームでのイベント処理

まで進みました  

つまり皆さんは、

「クラスは作れる」

「プロパティも使える」

「メソッドも定義できる」

という段階にいます。

では次に必要なのは何でしょうか?

それが カプセル化 です。


カプセル化とは何か?

一言で言うと:

データを“勝手に壊されないように守る設計”

です。


まずは「守らない」コード

class Player
{
    public int HP;
}
Player p = new Player();
p.HP = -1000;  // こんなこともできてしまう

問題は何でしょう?

  • HPがマイナスになる
  • ゲームの世界観が壊れる
  • バグの原因になる

誰でも自由に変更できる状態 は危険なのです。


カプセル化する

class Player
{
    private int hp;

    public int HP
    {
        get { return hp; }
        set
        {
            if (value < 0)
            {
                hp = 0;
            }
            else
            {
                hp = value;
            }
        }
    }
}

これで何が変わったでしょうか?

  • 外から直接 hp を触れない
  • 必ずルールを通して変更される
  • データの整合性が守られる

これが カプセル化 です。


今の皆さんにとっての意味

カプセル化は、

  • どこで値を守るのか
  • 誰が責任を持つのか
  • どのクラスがルールを知っているのか

を明確にするための技術です。


なぜ今やるのか?

皆さんは今、

  • Listにクラスを入れている
  • オブジェクトを大量に扱い始めている
  • Windowsアプリでイベントから値を受け取っている

つまり、

外部入力が増えている状態

なのです。

外部入力は危険です。

  • 空文字
  • 数値変換失敗
  • マイナス値
  • 想定外の値

これを守るのがカプセル化です。


カプセル化しないと何が起きるか

例:消費税計算アプリ

public int Price;

イベントで直接代入。

もし負の値が入ったら?

UIは正常でも内部は壊れます。

規模が大きくなるほど、

「どこで壊れたか分からない」状態になります。


カプセル化は「設計力」

初心者はこう考えます:

とりあえず動けばいい

中級者はこう考えます:

壊れない構造を作る

この差が

設計力の差

です。


今後の進化

カプセル化を理解すると、

  • get private / set private
  • コンストラクタで初期化
  • 不変オブジェクト
  • 継承時の安全設計
  • Unityでの状態管理

に繋がります。


まとめ

カプセル化とは:

  • データを守る
  • ルールを内部に持つ
  • 外部からの不正を防ぐ
  • 設計の責任範囲を明確にする

皆さんはもう

「クラスが書ける段階」から

「クラスを設計する段階」

へ進んでいます。

ここが分かれ道です。


訪問数 3 回, 今日の訪問数 3回

C#,カプセル化

Posted by hidepon