ショートカット
ファシリテーター × あり方
コーディングの向こう側
Hello, ANOTHER world!
オブジェクト指向のはなし
プログラミングのはなし
C言語実力診断クイズ
eSkillBooks
コーディングの向こう側

インターフェイスってナンダ? - PART1

欲しいものは何?度

サービスを提供する

すでに述べたとおり、ファイルフォーマットをインターフェイスにするのは好ましくありません。では、どうすれば良いのか。その答えは「アクセス関数」です。

ちょっと想像してみてください。ファイルを通してデータをやりとりするとき、そのデータがファイル上で実際にどのような配置になっているかということは、本当に知りたいことでしょうか?そうではないはずです。本当に欲しいのはデータそのものなのであって、データの配置方法ではないからです。もっと言えば、データがファイルに格納されているという事実すら知る必要はないのです。たとえて言うなら、駅の窓口で特急券を買うときに、その発券システムの操作方法を知っている必要はないということに似ています(発券サービスを提供している駅員さんが知っていればそれで十分です)。つまり、本当に必要なインターフェイスは欲しい情報を得るためのサービスなのであって、欲しい情報を自力で取り出す方法の定義(=ファイルフォーマット)ではないのです。この「欲しい情報を得るためのサービス」が「アクセス関数」です。

ファイルからデータを取り出すアクセス関数は、ファイルフォーマットを隠蔽したものでなければなりません。言い換えれば、ファイルフォーマットを知らなくてもデータが取り出せるような関数でなければいけません。同時に、データを論理構造で扱うことが望ましい。つまり、アクセス関数の利用者がデータを扱う上で都合の良い形式のサービスを提供するのが良いと言えます。もちろん利用者にとって都合の良い形式が、ファイルフォーマットとして都合の良い形式と一致するとは限りません。このギャップを埋めるのもアクセス関数の役割です。

もう一度、駅の窓口サービスを想像してみましょう。目的地の駅を駅員さんに伝えたい場合は、その駅名を言えばいいですね。これはごく当たり前のことなのですが、良くできたインターフェイスです。これがもし、発券システムを実装する側の都合で、駅毎に固有につけられた10桁の識別番号を伝えなければならない仕組みになっていたらどでしょう?ひどいインターフェイスですね。つまり、インターフェイスは利用者にとって都合の良い形になっていなければならないのです。

情報隠蔽

アクセス関数がインターフェイスだとすると、データが実際にどのようなフォーマットでファイルに格納されているかというのは実装にあたります。アクセス関数は実装とインターフェイスを明確に分離するための手段として有効であるということです。

ちなみに、アクセス関数によって実装を分離するという技法は、テストを行うときにも威力を発揮します。スタブモジュールが作りやすいのです。インターフェイスに実装が含まれていないので、都合の良いテストデータを返却するようなスタブが楽に作れます。

さて、あとは作業の分担をどうするかという問題が残っています。

前へ

目次へ
次へ

(「コーディングの向こう側」は2000年4月から2001年5月にかけて作成されたコンテンツです。)