「インタフェース」の仕組みを使うと,あらかじめ決めておいたメソッドを使用し,クラス間の処理のやり取りを行うことができます。また,インタフェースを実装したクラスは,必ず実装したインタフェースで定義されたメソッドが実行できることを保証されます。

インタフェースとパッケージ

 今回は「インタフェース」の仕組みについてご紹介します。インタフェースの仕組みは,主にプログラムの設計や整理をする場面において,知っておくと便利な仕組みです(図1)。

図1: インタフェースのイメージ(クリックすると別ウィンドウでムービーを表示します)

 インタフェースを利用することで「どんな機能が欲しいのかを自然に考える」ようになり,「これから,どんな物を作るのか」ということが視覚的にわかるようになります。また,チームで開発を行う際には,インタフェースを先に決めておくことで,その実装部分は個人に任せるといった開発スタイルが取りやすくなります。

「インタビュー・カード」のような感覚でインタフェースを使用してみる

 皆さん,自分がとある定食屋さんのオーナーだと想像してみてください。最近,あなたのお店の近くに,大きな工事現場ができました。そのため,あなたのお店には,現場で働く人たちが大量にやってきて,大忙しになりました。今の人数ではとても回していけません。そこで,何人かシェフを雇うことにしましょう。

 これから,何人かの人が,あなたの元へと面接にやってきます。あなたが聞きたい項目は「名前」「得意料理」の二つです。

 まず,あなたは効率よく二つの項目を聞けるように,図2のようなインタビュー・カードを用意してみました(*1)。

図2: 名前と得意料理を書き込むカード

 でも,一人目にやってきたシェフが困った顔で抗議します。「私の名前は屋比久慶次郎なのですが,これでは書き切れません。得意料理はタマナーチャンプルーなのですが,これも書ききれません」。

 なるほど,字数制限をしたのはまずかったか。そうだよね,こっちの都合だもんね。と思い,今度は図3のようなインタビュー・カードを作ってみました(*2)。

図3: 改良したカード

 すると,2人目にやってきたシェフが困った顔で抗議します。「私は本名のほかに,雑誌等でシェフとして紹介してもらっている芸名の二つがあるのですが,これでは本名しか書けません。できれば芸名で登録したいのですが」。

 そんなの勝手に書けばいーじゃん!とあなたは思ったのですが,でも,確かにこの表記だとまじめな人はそう思ってしまうこともあるかもしれません。外国のシェフの方であれば,気まじめに英語やフランス語で書き込むかもしれません。もし,そうだとしたらあなたにはその名前が読めないなんてこともあり得ます。さらにもうすぐ結婚して名字が変わるような方もいるかもしれません。なんとか臨機応変に,かつ,こちらの意図しているような答えを相手に出してもらう方法はないでしょうか?

 そこで,今度は発想を変えて,「決められた何かを書いてもらう」のではなく,図4のように,「何を聞くのか,そして,どんな形式での答えが欲しいのか」だけをメモして,その答えにいたるまでの考えは相手に任せるという形をとってみました。

図4: 相手に答えを任せるカード

 これならば,相手は自由に答えを考えられるし,こちらは欲しい情報を聞くことができます。ずいぶんスムーズにやり取りができるようになりました。厳密に名前や得意料理の「文字」などを書き込んでもらうのではなくて,「どんな質問をするのか,そして,その答えはどういう形式で答えてほしいのか」という質問事項をカードにして手渡したことで,その質問に対する答えの選択は,相手に任せてしまう,という仕組みができたわけですね。

 質問の内容のみを記していますので,それを聞く時期やタイミング,気分などのいろいろな要素によって相手はいろいろと考え,臨機応変に答えることができます。お互いにとって,ゆる~い約束をベースにして,欲しい情報のやり取りができる仕組みと言えます。

 この,「相手とのやり取りしたいことをメモしたインタビュー・カード」というのが,今回学習する「インタフェース」の考え方のヒントになります。