カプセル化とは何か?
現在のカリキュラムでは、
- クラスとオブジェクト
- メソッド
- static
- 値型と参照型
- List
- LINQ
- Windowsフォームのイベント処理
まで進みました。
つまり皆さんは、
「クラスは書ける」段階です。
次の段階は何か?
それが カプセル化 です。
目次
カプセル化とは?
一言で言うと:
データを勝手に壊されないように守る設計
です。
まずは守らないコード
class Player
{
public int HP;
}
Player p = new Player();
p.HP = -1000;
Console.WriteLine(p.HP);
何が問題でしょうか?
- HPがマイナスになる
- ルールがない
- 誰でも自由に変更できる
これは「無防備な状態」です。
第1段階:メソッドで守る
まずは皆さんがすでに理解している
メソッド で守ってみましょう。
class Player
{
private int hp;
public void SetHP(int value)
{
if (value < 0)
{
hp = 0;
}
else
{
hp = value;
}
}
public int GetHP()
{
return hp;
}
}
使用側:
Player p = new Player();
p.SetHP(-1000);
Console.WriteLine(p.GetHP());
ここで何が起きていますか?
- hpは直接触れない
- 必ずルールを通る
- データが守られる
これがカプセル化の第一歩です。
第2段階:C#ではプロパティを使う
C#では、上記をより自然に書ける仕組みがあります。
それが プロパティ です。
class Player
{
private int hp;
public int HP
{
get
{
return hp;
}
set
{
if (value < 0)
{
hp = 0;
}
else
{
hp = value;
}
}
}
}
使用側:
Player p = new Player();
p.HP = -1000;
Console.WriteLine(p.HP);
見た目は普通の変数のようですが、
内部では必ずルールが実行されています。
なぜ今やるのか?
皆さんは今、
- Listにクラスを入れている
- イベントから値を受け取っている
- 外部入力が増えている
という状態です。
外部入力は危険です。
- 空文字
- 数値変換失敗
- 想定外の値
- マイナス値
これを防ぐのがカプセル化です。
カプセル化しないとどうなるか
例:消費税計算アプリ
public int Price;
イベントから直接代入。
もし負の値が入ったら?
UIは正常でも、内部は壊れます。
規模が大きくなるほど、
「どこで壊れたか分からない」
という状態になります。
カプセル化は設計力
初心者の考え:
とりあえず動けばいい
中級者の考え:
壊れない構造を作る
この差が設計力の差です。
今後の発展
カプセル化を理解すると、
- get private / set private
- コンストラクタ初期化
- 不変オブジェクト
- 継承時の安全設計
- Unityでの状態管理
に繋がります。
まとめ
カプセル化とは:
- データを守る
- ルールを内部に持つ
- 外部からの不正を防ぐ
- 責任範囲を明確にする
皆さんは今、
「クラスが書ける段階」から
「クラスを設計する段階」
へ進んでいます。
ここが分かれ道です。
訪問数 11 回, 今日の訪問数 11回




ディスカッション
コメント一覧
まだ、コメントがありません