This is version . It is not the current version, and thus it cannot be edited.
[Back to current version]   [Restore this version]
★このページは書きかけです。

インタフェースは多態性の一種#

オブジェクト指向には
  • 多態性 (ポリモーフィズム:Polymorphism)
という機能があります。
多態性とは、処理(関数またはメソッド)の定義(呼び出し名+型+引数)が同一であっても、処理内部の動きをクラスごとに替えられる機能のことです。
例えばJavaにおいては、
  1. abstractメソッド
  2. Interface (インタフェース)
  3. override(オーバーライド)
という機能として実現されています。

インタフェースは役割#

責務はクラスではないの中で書いたように、
  • インタフェースは役割
と理解して下さい。一つ例を出します。
  1. 自転車
  2. バイク
  3. 自動車
  4. 飛行機
これらの役割は何でしょうか? 答えは簡単、
  • 乗り物
ですね。いずれも、人を乗せて運ぶことがその役割です。
少し考えてみれば判りますが、
  • 「今日は乗り物で来た。」ともし言われたら、
  • 「何に乗ったの?」という疑問が起こると思います。
一方で、
  • 「今日は自転車で来た。」と聞いて
  • 「何に乗ったの?」とは誰も思いません。
これは、
  • 役割では実体を決められない
からです。
  • 責務でクラスは決まらない
のと同じ事です。

実体を並べてみないと多態性を定義できない#

多態性について注意すべき点は、設計時と実装時で視点を180度替える必要があることです。

【設計時】#

  1. 実体(クラス)を先に並べて比較する。
  2. 共通的な処理を抽出する。
  3. その処理を再定義する(呼び出し名、戻り値、引数を共通化する)。
  4. インタフェースの場合はインタフェース名を決める。
上記のような流れになりますが、特にインタフェースを決める場合、それよりも先に実体(クラス)が無いと共通化は出来ません。乗り物の例と同じです。つまり、
  • クラス→インタフェース
の順番で設計していくことになります。
実体を並べてみて共通化あるいは抽象化することを
  • 汎化
と言います。一般的な言葉で言う「汎用化」と同じ意味です。

【実装時】#

  1. 設計時に決めたインタフェースまたはabstractメソッドを実装する。
  2. それらを実現するためのクラスを実装する。
言うまでもありませんが、インタフェースやabstractメソッドが先に無いと実現クラスの実装は出来ません。つまり、
  • インタフェース→クラス
の順番で実装していくことになります。
  • 多態性を利用する際は、まず最初に個別の実体(クラス)を並べてみて共通化する必要がある
ことに注意して下さい。インタフェースやabstractメソッドがクラスよりも先に出来るわけではありません。
視点を180度替える必要があるというのはこのことです。

添付ファイルの追加

ログイン済のユーザのみが添付ファイルをアップロード出来ます。
« This particular version was published on 16-1-2012 14:41 by ytp.