オブジェクト指向「カプセル化」とは何か
現在のカリキュラムでは、
- クラスとオブジェクト
- メソッド
- 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回


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