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(オーバーライド)
という機能として実現されています。

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

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

【設計時】#

  1. 実体(オブジェクト)を先に並べて比較する。
  2. 共通的な処理を抽出する。
  3. その処理を再定義する(呼び出し名、戻り値、引数を共通化する)。
  4. インタフェースの場合はインタフェース名を決める。
上記のような流れになりますが、特にインタフェースを決める場合、それよりも先に実体(オブジェクトとクラス)が無いと共通化は出来ません。つまり、
  • クラス→インタフェース
の順番で設計していくことになります。

【実装時】#

  1. 設計時に決めたインタフェースまたはabstractメソッドを実装する。
  2. それらを実現するためのクラスを実装する。
言うまでもありませんが、インタフェースやabstractメソッドが先に無いと実現クラスの実装は出来ません。つまり、
  • インタフェース→クラス
の順番で実装していくことになります。

設計者のほとんどは実装を先に経験するためだと思いますが、

  • 多態性を利用する際は、まず最初に個別の実体(クラス)を並べてみて共通化する必要がある
ことに気付いていない人が多いように思います。インタフェースやabstractメソッドはクラスよりも先に出来るものと思っているようなのです。
視点を180度替える必要があるというのはこのことです。

インタフェースは役割#

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

添付ファイルの追加

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