OOPSのポリモーフィズム:ポリモーフィズムとは[詳細な説明]

公開: 2020-11-24

OOPのポリモーフィズムは不可分であり、すべてのオブジェクト指向プログラミング言語の本質的な概念です。 オブジェクトまたは参照は、基本的に、さまざまなインスタンスで複数の形式をとることができます。 単語が示唆するように、「ポリ」は「多くの」を意味し、「モーフ」は「フォーム」を指します。 したがって、全体としてのポリモーフィズムは、「多くの形態を持つ特性」を意味します。

オブジェクト指向プログラミング言語は、単一のインターフェースによってクラスとオブジェクトを処理します。 これは、関数のオーバーロード、オーバーライド、および仮想関数の概念を実装します。 また、通常、プログラミングで継承を計測するために使用されます。

読む:ポリモーフィズムと継承

目次

OOPのポリモーフィズムの例

ポリモーフィズムは、オブジェクト指向プログラミング言語のメソッドであり、オブジェクトを呼び出すオブジェクトのクラスごとに異なることを実行します。 ポリモーフィズムでは、メッセージが複数のクラスオブジェクトに送信され、すべてのオブジェクトがクラスのプロパティに従って適切に応答します。

以下は、ポリモーフィズムを明確に説明するコードです。

警告を使用します。
#パッケージクラスの作成
パッケージA;
#コンストラクターの作成
サブニュー
{{
#shiftはパッケージ名を取ります
#そしてそれを変数'class'に割り当てます
私の$class=シフト;
私の$self= {
'名前'=>シフト、
'roll_no'=>シフト
};
サブメソッド
{{
print( "これはクラスAに属します");
}
};
パッケージB;
#@ISA配列にはリストが含まれています
そのクラスの親クラスの数(存在する場合)
私の@ISA=(A);

サブメソッド
{{
print( "これはクラスBに属します");
}
パッケージメイン;
B-> method();
A-> method();

出力:

これはクラスBに属します

これはクラスAに属します

Swiggy、Quora、IMDBなどのアプリケーションの構築方法を学ぶ

説明

最初の出力では、クラスBで定義されたmethod()が、クラスAから継承された定義をオーバーライドし、2番目の出力ではその逆になります。 このプロパティは、クラス全体の定義を書き直すことなく、既存のパッケージの機能を拡張するのに役立ちます。 したがって、プログラマーにとって仕事が簡単になり、広く使用される理由がわかります。

おっとにおけるポリモーフィズムの種類

オブジェクト指向プログラミング(OOPS)言語には、次の2種類のポリモーフィズムがあります。

  1. 静的バインディング(またはコンパイル時)ポリモーフィズム、たとえば、メソッドのオーバーロード
  2. 動的バインディング(またはランタイム)ポリモーフィズム、たとえば、メソッドのオーバーライド

ソース

1.コンパイル時間または静的ポリモーフィズム

メソッドオーバーロードを使用すると、静的ポリモーフィズムがオブジェクト指向プログラミング言語で実現され、プログラマーはさまざまなメソッドを実装できます。 使用する名前は同じでもかまいませんが、パラメーターは異なります。 特定の条件は、以下のように静的ポリモーフィズムを助長します。

  • すべてのパラメータのタイプは異なる必要があります。
  • パラメータの順序は異なる場合があります。
  • 1つのメソッドのパラメーターの数は、他のメソッドとは異なる必要があります。

静的バインディングポリモーフィズムでは、一致するタイプと引数の数がオーバーロードされた関数を呼び出します。

  • この情報はすべてコンパイル時に利用できるため、コンパイラは適切な関数を選択します。
  • 関数のオーバーロードはそれを行い、演算子のオーバーロードは静的バインディングまたは早期バインディングとも呼ばれます。

プログラム

クラスA //基本クラス

{{

int a;

パブリック

void display()

{{

cout << “クラスA“ ;

}

};

クラスB:パブリックA //派生クラス

{{

int b;

パブリック

void display()

{{

cout << “クラスB” ;

}

};

上記のプログラムでは、display()関数のプロトタイプは基本クラスと派生クラスの両方で同じです。 したがって、ここでは静的バインディングを適用できません。 このプログラムは、適切な機能を選択することで、実行時に最適に実行されます。

  • 実行時に、言語のコンパイラは、さまざまなメソッドのシグネチャを識別することにより、それらのメソッドを識別します。
  • コンパイラは最初にメソッドシグネチャを識別し、プログラムのコンパイル中に特定のメソッド呼び出しのメソッドを決定します。
  • コンパイル時ポリモーフィズムの実行ははるかに高速ですが、プロセスはそれほど柔軟ではありません。

また読む: OOPSインタビューの質問

ランタイムまたは動的ポリモーフィズム

動的ポリモーフィズムでは、単一のオーバーライドされたメソッドの呼び出しは、プログラムの実行時に解決されます。 メソッドのオーバーライドは、ランタイムポリモーフィズムの顕著な例の1つです。 このプロセスでは、オーバーライドはポインターと仮想関数を介して行われます。

  • メソッドのオーバーライドでは、親クラスに存在するサブクラスで単一のメソッドが宣言されます。 子クラスは、実装のためのメソッドを取得します。
  • ランタイムポリモーフィズムの間、クラスは別の継承されたメソッドに独自の仕様を提供します。 メソッド間のこの転送は、親クラスのオブジェクトコードを変更せずに実現されます。

プログラム

#include <iostream>

名前空間stdを使用します。

classAnimal{ //基本クラス

パブリック

文字列の色= 「茶色」 ;

};

class Dog: publicAnimal //動物クラスを継承します

{{

パブリック

文字列の色= 「緑」 ;

};

int main( void ){

動物d=Dog();

cout << d.color;

}

出力:

茶色

  • 実行時ポリモーフィズムで、オブジェクトのメソッドはコンパイル時ではなく実行時に呼び出されます。
  • これは、動的バインディングまたは遅延バインディングとしても造られたメソッドオーバーライドによって可能になります。
  • 動的ポリモーフィズムのプロセスは、コンパイル時のポリモーフィズムよりも比較的低速ですが柔軟性があります。

B/Wコンパイル時と実行時のポリモーフィズムの違い

コンパイル時のポリモーフィズムランタイムポリモーフィズム
関数の呼び出しこの関数はコンパイル時に呼び出されます。 この関数は実行時に呼び出されます。
共通用語これは、オーバーロード、早期バインディング、および静的バインディングとして知られています。 これは、オーバーライド、遅延バインディング、および動的バインディングとして知られています。
メソッド名とパラメータオーバーロードでは、複数のメソッドが同じ名前を持ちますが、パラメーターの数またはタイプが異なります。 オーバーライドでは、複数のメソッドが同じ名前、数、およびパラメーターのタイプを持っています。
キャリアこれは、関数と演算子のオーバーロードによって実現されます。 これは、仮想関数とポインターを使用して実現されます。
実行時間コンパイル時に実行時のポリモーフィズムよりも高速に実行されます。 実行時のコンパイル時のポリモーフィズムよりも実行速度が遅くなります。
柔軟性すべてがコンパイル時に実行されるため、柔軟性が低くなります。 すべてが実行時に実行されるため、より柔軟性があります。

最後の言葉

ポリモーフィズムは、プログラミング中にいくつかの利点を提供するため、OOPの概念を学ぶ必要があります。 ポリモーフィズムを使用すると、ユーザーはテストされたクラスとコードを再構築できます。 プログラミング自体を拡張するのに役立ちます。 また、ユーザーは、double、Float、Int、Longなどの複数の異なる型変数を単一の変数に格納して、それらの検索と実装を簡単にすることができます。

OOP、フルスタックソフトウェア開発について詳しく知りたい場合は、upGrad&IIIT-Bのフルスタックソフトウェア開発のPGディプロマをチェックしてください。これは、働く専門家向けに設計されており、500時間以上の厳格なトレーニング、9以上のプロジェクトを提供します。および割り当て、IIIT-B卒業生のステータス、実践的な実践的なキャップストーンプロジェクト、およびトップ企業との雇用支援。

フルスタック開発者になる

ソフトウェア開発におけるアップグレードおよびIIIT-BANGALOREのPGディプロマ
もっと詳しく知る