QA@IT
«回答へ戻る

回答を投稿

「結局のところインターフェースってなんなの?」という質問なら、まず前提としてオブジェクト指向をよく理解する必要があります。

大雑把に言えば、オブジェクトとオブジェクトの「接点」を定義するためにインターフェースはあります。
あるオブジェクトにアクセスするときは、そのインターフェースを経由する的な概念があります。

例えば、Firefox(WWWブラウザ)がApache(Webサーバー)にアクセスする様子にたとえると、
まず、FirefoxがApache固有の実装にアクセスすることはありません。
ApacheはHTTPプロトコルに基づいて実装されており、FirefoxはHTTPプロトコルを使ってApacheにアクセスします。
だから、Webサーバーの実体が、ApacheだろうとTomcatだろうと区別なく使えます。

このとき、FirefoxやApacheがオブジェクトで、HTTPプロトコルがインターフェースに相当します。

HTTPプロトコルには、GETメソッド、POSTメソッド、HEADメソッドなどが定義されていますが、その実体はありません。

インターフェースはクラスとは異なります。メソッドの定義のみで実装がない抽象クラスはインターフェースに似ていますが、それはただ単に似ているだけです。
今回の例では、「WWWブラウザ」や「Webサーバー」が抽象クラスに相当します。

正式にオブジェクト指向に基づいて実装するなら、オブジェクトには必ずインターフェースが伴うものです。あってもなくても良いというものではありません。

例えば、デザインパターンについて書かれている”通称GoF24本”でも、オブジェクトにはインターフェースが伴う前提でパターンが解説されています。

「結局のところインターフェースってなんなの?」という質問なら、まず前提としてオブジェクト指向をよく理解する必要があります。

大雑把に言えば、オブジェクトとオブジェクトの「接点」を定義するためにインターフェースはあります。
あるオブジェクトにアクセスするときは、そのインターフェースを経由する的な概念があります。


例えば、Firefox(WWWブラウザ)がApache(Webサーバー)にアクセスする様子にたとえると、
まず、FirefoxがApache固有の実装にアクセスすることはありません。
ApacheはHTTPプロトコルに基づいて実装されており、FirefoxはHTTPプロトコルを使ってApacheにアクセスします。
だから、Webサーバーの実体が、ApacheだろうとTomcatだろうと区別なく使えます。

このとき、FirefoxやApacheがオブジェクトで、HTTPプロトコルがインターフェースに相当します。

HTTPプロトコルには、GETメソッド、POSTメソッド、HEADメソッドなどが定義されていますが、その実体はありません。


インターフェースはクラスとは異なります。メソッドの定義のみで実装がない抽象クラスはインターフェースに似ていますが、それはただ単に似ているだけです。
今回の例では、「WWWブラウザ」や「Webサーバー」が抽象クラスに相当します。


正式にオブジェクト指向に基づいて実装するなら、オブジェクトには必ずインターフェースが伴うものです。あってもなくても良いというものではありません。

例えば、デザインパターンについて書かれている”[通称GoF24本](http://www.amazon.co.jp/dp/4797311126)”でも、オブジェクトにはインターフェースが伴う前提でパターンが解説されています。