10/01/15 15:48:35
カプセル化で仕様変更に強くなるのは、直接的には、
インターフェイスを変えない限り、中身をどんなにいじろうとも、それを扱うクラスをいじらなくてもいい。
ここは>>536でもさすがに理解していると思う。
しかし重要なのは、メンバ変数に対する責任を、そのクラスだけが持てばいいということが明らかになること。
人間に例えれば、カプセル化というのは、クラスの役割を決めるということだよ。
機能は担当する業務の内容で、メンバ変数はその仕事を遂行するのに必要なアイテム。
そのアイテムをほかの人に触られないように隠しておくことで自分の業務に責任をもてるようにする。
備品を管理する担当者がいたとして、担当者に黙って台帳を修正したり、勝手に備品を持ち出したりしたら混乱する。
カプセル化せずに混乱を解決するとしたら、社員全員が忘れずに台帳を間違いなく修正するよう努力する必要がある。
そして守らないやつも出てくるから、定期的にたな卸しして台帳と備品を付き合わせることになるし、あわないときのリカバリも大変。
台帳と備品は備品管理担当者が隠蔽しておき、
社員は必ず担当者に備品をくれと頼むようにとルールを決めるのがインターフェイス。
台帳は担当者が修正するからほかの人は台帳の存在を知る必要がない。これがカプセル化。
こうしたカプセル化によって、担当者は台帳と備品の数が常に一致しているということに責任を持てる。
ペン1本もらうのにルールを増やすのはめんどい→仕様変更に弱いという発想なんだろうけど、
実はまったく逆で、書き込む台帳が1つから2つに増えても、
逆に台帳を省略しても、それをほかの社員に教えて徹底させる必要がまったくない→仕様変更に強いというわけ。
もしこれが現実のコードなら、台帳に相当するものが増えたら、
社員全員のコードを全て間違いなく書き直さなくてはいけない。
コンパイルをやり直すってレベルじゃないよ。