著作一覧 |
側ったって、左側とか右側の話ではない。それはそうだけど、右側には注意したい。
カプセル化という言葉がある。ある必要性から、コンサバなOOPの本を読んでいるのだが、カプセル化のところを読んでいると、まず何よりもカプセル化というのはフィールドを隠すことだのようなことが書いてあって、まだこんな無意味なことを最初に出すのかと不思議に思う。したがって、理由を考える。
カプセル化で最も重要な点というのは、オブジェクトの状態に対する外部からの操作を「不要にする」ことだ。
としてみる。これが、一番、感覚的(もちろんこの感覚はおれの感覚だ)には重要だからだ。
であれば、重要なことは、インスタンス単位にデータが分離され、そのインスタンスを操作する手続きがあることだ。この手続きが配置されるのが構造体内部の関数ポインタなのか外部の関数かどうかは、上の「外部からの操作」とは一切関係ないことは明らかだ。
したがって、カプセル化そのものについてはクラスは不要であるし、Cでも問題なく使える。構造体を引数にする一連の手続きを用意すれば良いからだ。
つまり、カプセル化という概念は、OODの分野に属し、OOPではその状態と操作のペアを同じ括りで記述できるようにしているために、ソースコードの記述性に優れる「だけ」と言える。
さて、今、右も左もわからず、デザインパターン(GoFを意味するのではなく、たとえば上で書いたカプセル化というのがデザインのパターンに属するということをここでは書いている)を知らない人間にカプセル化を説明することを考える。
実のところ、上で感覚的にしっくりとくる「外部からの状態操作を不要化する」ということはいろいろな角度から言い換えることが可能だ。
もっともプログラミング的な言い方をすると、「外部とのインターフェイスにはAPIのみを利用する」ということだ。
デザインパターンでは、ファサードを建てるということになる。人は表玄関から出入りする。そのほうが広いし、門番もいるし、レセプションでコード(ドレスコード)チェックまでしてくれる。
これと、裏口の存在や大量仕入れのための地下搬入口の存在は矛盾しない。
したがって、フィールドの可視性というのは、なぜ必要なのか? という疑問に突き当たる。
着飾ったお嬢さんが、わざわざ汚水にまみれながら下水道から忍び込むかね?
「もちろんです。あの連中は目が悪いから、表玄関から来ないのです。あるいは、連中は怠惰なので、たった10メートルの距離をショートカットするために裏口から入ってくるのです。だからprivateにしてやるのです。それが一番重要なのであります」
面倒になってきちゃった。
ジェズイットを見習え |