外見と中身

 私がオブジェクト指向プログラミングを始めたときに初めて出会ったフレームワークが、Visual C++/MFC のドキュメント・ビューアーキテクチャでした。本質を理解するまでにはかなりの時間がかかりましたが、1つのドキュメント(データ構造)が、いくつかの異なるビュー(見栄え)と繋がる、すなわちデータ構造と見栄えというのは無関係なのだという考え方に、感動すら覚えたことは今でも鮮明に思い出します。

 次に J2EE の開発に携わったときに知ったのが、MVC(Model-View-Controller)モデルでした。ドキュメント・ビューアーキテクチャに親しんでいた私は、Model=ドキュメント、View=ビューは直感的に理解できたのですが、Controllerについては、ドキュメント・ビューアーキテクチャには存在しない(実際には、ドキュメント、ビューに分散していた)ので、理解に苦しんだ覚えがあります。

 話は少しそれましたが、オブジェクト指向にはカプセル化やインタフェースの公開・非公開を制御する機能があります。これはまさに、オブジェクトの外見(インタフェース)と中身(データ構造、ロジック)は、必ずしも一致しないことを示しているとは言えないでしょうか。

 この考え方を発展させれば、MVCにおけるModelにおける外見は「アプリケーションから扱いたい、扱いやすいインタフェース」であり、中身は「データベースの構造とアプリケーションとやりとりするデータなどとの仲介」ということになるのではないでしょうか。