プログラミングにおけるポリモーフィズム

プログラミングにおけるポリモーフィズム

  • ITOps・DevOps
6分で読めます 更新日 Oct 23, 2020

ポイント: プログラミングにおけるポリモーフィズムは、オブジェクトが複数の形を取ることを可能にし、さまざまな型に対して統一されたインターフェースを提供します。これはオブジェクト指向プログラミングにとって重要です。コードの柔軟性と再利用性を向上させます。

  • ポリモーフィズムの種類には、サブタイプ、パラメトリック、アドホック、強制があります。
  • 例は「Car」などのクラスを通じてポリモーフィズムを示しています。

ポリモーフィズムは、さまざまな形を取ることができるオブジェクトとして定義されます。本記事では、ポリモーフィズムとそれがプログラミングでどのように使用されるかを見ていきます。

ポリモーフィズムとは何ですか?

基本的なレベルでは、ポリモーフィズムは数学の型理論の一部です。コンピュータサイエンスにおいて、ポリモーフィックオブジェクトは複数の形を取ることができるオブジェクトです。オブジェクトが取るポリモーフィズムの種類は、いつオブジェクトがその形を取り、どの部分のオブジェクトが変換されるかに依存します。

ポリモーフィズム
ポリモーフィズム画像

オブジェクトが変換されるのは:

  1. コンパイル時
  2. 動的

変換されるのは:

  1. メソッド
  2. オブジェクト

プログラミングにおけるポリモーフィズム

「プログラミング言語と型理論において、ポリモーフィズムは、異なる型のエンティティに対して単一のインターフェースを提供すること、または単一のシンボルを使用して複数の異なる型を表現することです。」

ポリモーフィズムはオブジェクト指向プログラミング(OOP)に不可欠です。オブジェクトはクラスとして定義されます。プロパティやメソッドを持つことができます。例えば、クラス「Car」として定義されたオブジェクトを作成できます。この車は以下のようなものを持つことができます:

  • プロパティ:色、メーカー、モデル、現在の速度
  • メソッド:クラスによって呼び出される関数(進む、止まる、駐車する、左に曲がる、右に曲がるなど)

上記のCarオブジェクトがポリモーフィックであるためには、そのプロパティとメソッドを同じクラス名「Car」を使用して呼び出すことができ、コード内での使用方法に応じて異なるタイプを呼び出すことができます。

ポリモーフィズムの種類

ポリモーフィズムには主に4つの種類があります:

ポリモーフィズムの種類

それぞれ見てみましょう。

サブタイプポリモーフィズム(ランタイム)

サブタイプポリモーフィズムは最も一般的な種類のポリモーフィズムです。「オブジェクトはポリモーフィックです」と言うときに通常参照されるものです。サブタイプポリモーフィズムは、1つのクラス名を使用して複数のサブタイプを同時に参照します。上記の車の例では、オブジェクトクラス「Car」を作成し、それに対してFord、Chevrolet、Kia、Nissan、Volkswagen、BMW、Audi、Teslaなどの複数のサブタイプを定義します。各車にはプロパティである色があります。すべてのサブタイプはクラスCarを使用して相互に参照できます。すべての車にはプロパティ色があり、各Carクラスのサブタイプから色を取得できます。ポリモーフィズムはランタイムで発生します。任意の車のサブタイプの色を取得する関数を書くことができます。この関数は次のようになります(特定のプログラミング言語で記述されているわけではありません):

    getColor(BMW)
	→ returns red
getColor(Audi)
	→ returns blue
getColor(Kia)
	→ returns yellow

パラメトリックポリモーフィズム(オーバーロード)

パラメトリックポリモーフィズムは、1つの関数(同じコード)を使用して複数の型と対話する方法を特に提供します。例としては、型のリストがあります。パラメトリックポリモーフィズムは、このリストの要素を型に関係なく削除、追加、または置き換えることができます。このコードは、Pythonで書かれたパラメトリックポリモーフィズム関数の例です:

    for (element in list):
	list.remove(element)

アドホックポリモーフィズム(コンパイル時)

アドホックポリモーフィズムでは、同じ名前の関数が異なる型に対して異なる動作をします。Pythonは動的型付けであり(型を指定する必要はありません)、Pythonの加算関数はアドホックポリモーフィズムです。これは、複数の型に対して機能する同じ名前の単一の関数「+」です。両方(Python):

    3 + 4
"Foo" + "bar"

それぞれの型に対応する値を返します。intとStringです。

    → 7
→ "Foobar"

int型の値の場合、加算関数は2つの値を加算するので、3+4は7を返します。String型の値の場合、加算関数は2つの文字列を連結するので、「Foo」 + 「bar」は「Foobar」を返します。

強制ポリモーフィズム(キャスティング)

強制ポリモーフィズムは、1つの型を別の型に直接変換することです。これは、1つの型が別の型にキャストされるときに発生します。以前は、ポリモーフィズムは異なる型と対話することでオブジェクトクラスまたは関数を介して発生していました。オブジェクトの型はプログラムが実行されたときに選択できます。単一の関数は異なる型で機能できます。簡単な例は、数値をintからdouble、floatに変換することです。プログラミング言語によっては、型を変数に定義できるか、時には型に対して値を別の型に変換するメソッドが存在します。Pythonはこのように型を変換します:

    int(43.2) #Converts a double to an int
float(45) #Converts an int to a float

Javaは、単に型を定義することによって型を変換するかもしれません:

    int num = 23;
double dnum = num;

または

    double dnum = Double.valueOf(inum);

これらの投稿は私自身の意見であり、BMCの立場や戦略、意見を必ずしも表しているわけではありません。

ITOps・DevOpsの関連記事

BMCからのさらなる情報に興味がありますか?

ザ・ブリーフは、メインフレームとエンタープライズオーケストレーションに関する月刊メールです:研究、顧客ストーリー、製品ニュース、イベント。

このオファーに登録することで、あなたはBMCのプライバシーポリシーを読み、同意したことを確認します。

ザ・ブリーフに登録しました

ザ・ブリーフは、メインフレームとエンタープライズオーケストレーション—BMC AMIおよびControl-M—に関するアナリストの研究、顧客の展開、両者にわたるイベントを網羅しています。