★このページは書きかけです。

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

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

インタフェースは役割#

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

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

多態性を利用する時に注意すべき点は、設計時と実装時で手順を180度替える必要があることです。

【設計時】#

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

【実装時】#

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

添付ファイルの追加

ログイン済のユーザのみが添付ファイルをアップロード出来ます。
« This page (revision-10) was last changed on 18-3-2014 00:22 by ytp