クラス設計について 隠蔽とピザ、インタフェースと定食屋
おれはピザが好きだ。
お気に入りはドミノ・ピザで、一月に一度は注文する。
トッピングの種類や生地(パン生地こそ至高)を指定して
電話をすると40分程度でアツアツのピザを届けてくれる。
サッポロビールと映画とピザ、これらはよく合う。休日のささやかな幸せなひとときだ。
(嫁のおしゃべりで映画のセリフが聞こえないことが玉にキズだが)
で、このピザ宅配だが、電話を受けると生地に具を乗せオーブンへ入れて、その間にバイトは俺の家までの道のりを調べて、伝票切って……と、おれの見えない、知らないところで仕事が行われている。
しかしそれらは、隠蔽(カプセル化)されてよいprivateな処理であって、我々はpublicな、ピザ屋さんの電話番号とメニューさえあれば望むものはgetできる。
ピザ屋の頑張りなど、知ったことではないし、第一そんなことを考えさせられると、ピザが食いづらい。
あとは定食屋のはなし。
定食屋には、当然キッチンがある、材料もある。自分側キッチンにはいっていって飯を作ることも出来なくはないけど、それは禁止されている(当たり前だ!)
だから、我々には「注文する」ことしか「許容」されていない。もちろんコックさんは「料理をする」ことはできる。コックさんは定食屋のひとだからだ。我々は部外者だ。
ここまで、あるクラスの内部処理の隠蔽の話と、適切なインタフェースによるオペレーションの制限のおはなし。
なんだか、変なたとえになってしまった。
つぎは、定番中の定番、箱系オブジェクトと処理系オブジェクトの話を書こう。