@634

GRASPパターン - Polymorphismパターン(多態性パターン)

Advertisement

Polymorphismパターンの提唱するもの

ポリモフィズムはオブジェクト指向で、重要な概念のひとつである。「同じインタフェースに対して異なる振る舞いをする。」「同一のメッセージに対して異なる振る舞いをする。」などのような難しい説明がされるが、基本的な考え方は単純である。

異なるオブジェクトに対して同じメッセージを送った場合に、各オブジェクトはそれぞれ独自の振る舞いを行う。

考察

従来の手法で設計していると、条件により使用するクラスが変更になる時などに、条件分岐命令を使用しなければならない。条件分岐命令を使用していると、オブジェクトの種類が変更になった時に条件分岐の部分も変更しなければならないが、ポリモフィズムを使用して設計を行っていると分岐を排除することができるので、変更が容易になる。

メリット

  • 重複したコードの排除
  • 重複した条件分岐の排除
  • 同一のインタフェースを持つオブジェクトなら、既存のコードを変更せずに追加することが出来る。

ものすごく単純な例

例として出力を行うプログラムを考える

ポリモフィズムパターンの基本図
図1:ポリモフィズムの基本図

出力を行うインタフェースを持つクラスを利用する側の、メインのクラスでは、出力インタフェースのインスタンスを保持できるようにしておく。
Mainクラス
図2:Mainクラスの設計

これにより、Mainクラスにファイル出力オブジェクトを保持させればファイル出力を行い、コンソール出力オブジェクトを保持させればコンソール出力を行うことができる。ここで注目する点は、この振る舞いの異なる動作を同じインタフェースで使用できる点である。

コードで表現すると、次のようになる
public class Test{
    public static void main(String[] args){
        出力 out = new ファイル出力()
        // 出力 out = new コンソール出力()

        out.出力()
    }
}
ファイル出力オブジェクトでもコンソール出力オブジェクトでも、出力は ”out.出力()”という同一のメソッド呼び出しで行う。

Advertisement

ショートカット

634
634ブログ
このカテゴリのトップページに戻る
Incubator(Pukiwiki)
634ラボ
   UIコレクションギャラリー
   ZO-3ジェネレーター

サイト検索


Y!ログール