カプセル化

http://d.hatena.ne.jp/hogeratta/20051217#1134823538
「座標情報」をカプセル化するかどうかについての話題があったので、
私なりの考えを書いておきます。
 
個人開発ということを考えると、public変数であって全然問題ないと思います。
というのは、private変数にすると、
アクセサ関数を作るのも面倒で、
アクセスするときにいちいちgetter/setterを呼ぶのも面倒だからです。
 
 
ただ、カプセル化すると、手続きが面倒になりますが、
長い目で見ると色々と利点があったりします。
 
「座標情報」のカプセル化を行った場合は、だいたいこのような処理になると思います。

  1. 「座標の更新」がある場合は、update関数などを利用して、加速度・移動量などを元にそのオブジェクトの座標の更新を行います。
  2. そして、更新後の座標を元に「当たり判定(衝突検知)」を行うために、getPos関数を使用して、そのオブジェクトの座標を取得し、当たり判定を行います。
  3. その結果衝突していた場合、collide関数(衝突応答)などから、そのオブジェクトの座標の更新などを行います。

 
こうすることにより「座標情報」は、getPos関数からのみ参照できる
「読み取り専用」の情報となります。
 
そして、このような手順を踏むことにより、それぞれの処理がより明確になります。
 
そのため、例えば「衝突検知」にバグがあった場合、
どの部分を直せばよいのかがすぐ分かり、修正の手間を減らす効果があります。