ポリモーフィズム 【polymorphism】 多態性 / 多相性 / ポリモルフィズム
概要
ポリモーフィズム(polymorphism)とは、プログラミング言語の持つ性質の一つで、ある関数やメソッドなどが、引数や返り値の数やデータ型などの異なる複数の実装を持ち、呼び出し時に使い分けるようにできること。静的型付けの言語で関数などを定義する際には、引数や返り値のデータ型を指定しなければならないため、処理内容が同じでもデータ型ごとに整数用、浮動小数点数用、複素数型用…といったように異なる(名前の)関数を何度も繰り返し定義しなくてはならず、呼び出し側も型ごとに異なる関数を呼び分けなければならない。
ポリモーフィズムに対応した言語では、同名の関数などを繰り返し定義することができ、型ごとに別々の関数を用意しなくても一つの(共通の名前を持つ)関数としてまとめることができる。ただし、具体的な処理内容は型ごとに個別に記述しなければならない。。
分類
呼び出し側に記述された引数の型や数の違いに応じて、処理系が自動的に合致する実装を選んで呼び出してくれる方式を「アドホック多相」(ad hoc polymorphism)、呼び出し時に型をパラメータとして明示的に指定する方式を「パラメータ多相」あるいは「パラメトリック多相」(parametric polymorphism)という。後者はC言語などでは「テンプレート」(template)、Javaなどでは「ジェネリクス」(generics)と呼ばれる機能として知られる。
また、二つのデータ型が基本型と派生型の関係にあるとき、基本型を引数に取る関数を定義することにより派生型でも同じように動作させるようにすることができ、これを「サブタイプ多相」「部分型多相」(subtype polymorphism)などという。オブジェクト指向プログラミング言語では親クラスから派生(継承)した子クラスがメソッドの内容を上書き(オーバーライド)したり、インターフェースで定義されたメソッドを実装することによりこれを実現している。
(2019.2.19更新)