\r\n\r\n
オブジェクト指向プログラミング(OOP)は、ソフトウェア開発における一般的なアプローチです。多くのプログラミング言語がオブジェクト指向プログラミングをサポートしています。オブジェクト指向プログラミングは、クラスとオブジェクトを使ってプログラムを設計する手法です。オブジェクト指向におけるクラスは、オブジェクトを作成するための設計図です。クラスには、プロパティとメソッドがあります。OOPは、継承、ポリモーフィズム、抽象化、カプセル化の4つの柱で構成されています。この記事では、OOPにおけるポリモーフィズムと継承の違いについて説明します。OOPにおけるポリモーフィズムと継承の重要な違いは、ポリモーフィズムがオブジェクトが複数の振る舞いをする能力であるのに対し、継承は既存のクラスのプロパティとメソッドを使用して新しいクラスを作成することである点です。
1. 概要と主な相違点 2. OOPにおけるポリモーフィズムとは 3. OOPにおける継承とは 4. OOPにおけるポリモーフィズムと継承の類似点 5. 横並びの比較 - OOPにおけるポリモーフィズムと継承の表形式 6. まとめ
ポリモーフィズムとは、複数の形態を指す。オブジェクトは複数の振る舞いを持つことができる。ポリモーフィズムは2つのカテゴリに分けられる。
Javaで書かれた次のプログラムを参照してください。
図01:オーバーロード
上記のプログラムに従い、A型のオブジェクトを作成する。target amount (); を呼び出すと、sum() メソッドに関連する出力が得られます。target amount (2,3) を呼び出すと、sum(int a, int b)に関連した出力が得られる。同じものでも、状況によって挙動が異なることが観察されます。同じ名前でパラメータが異なるメソッドが複数存在することをオーバーロードと呼びます。静的バインディング、コンパイル時ポリモーフィズムとも呼ばれる。
ポリモーフィズムのもう一つのタイプは,Javaで書かれた次のプログラムを参照すると,書き換えられる。
図02:オーバーレイ
上のプログラムによると、クラス a には display() というメソッドがあり、クラス B はクラス a から拡張されているので、クラス a のすべてのメソッドをクラス B からアクセスすることができます。継承の概念については、後でさらに説明します。
クラスBも同じdisplay()メソッドを持っています。A型のオブジェクトを生成してdisplayメソッドを呼び出すと、B型として出力されます。Aクラスのdisplayメソッドは、Bクラスのdisplayメソッドにオーバーライドされます。したがって、出力はBとなります。
同じ名前とパラメータを持つメソッドが2つの異なるクラスにあり、それらが継承によって結ばれていることをオーバーライドと呼びます。レイトバインディング、ダイナミックバインディング、ランタイムポリモーフィズムなどとも呼ばれる。オーバーロードやオーバーライドをポリモーフィズムと呼びます。オブジェクト指向プログラミングの重要な概念である。
Javaで書かれた次のプログラムを参照してください。
図03:継承の例
上記のプログラムによると、クラスAはsum()メソッドを、クラスBはsub()メソッドを持つ。
クラスAのsum()メソッドは、extendキーワードを使ってクラスBで使用することができます。既存のクラスのプロパティやメソッドを再利用して、新しいクラスを作ることを継承といいます。クラスBにsum()メソッドがなくても、クラスAから継承されている。コードの再利用性を高めるために、継承は有効です。古いクラスは、ベースクラス、スーパークラス、親クラスと呼ばれます。派生したクラスは、サブクラスまたはサブカテゴリと呼ばれます。
継承には、単一レベル継承、多レベル継承、多重継承、階層継承、混合継承がある。
単一継承では、スーパークラスとサブクラスが存在します。クラスAをスーパークラス、クラスBをサブクラスとすると、クラスBはクラスAのすべてのプロパティとメソッドにアクセスすることができます。
多段階継承では、3つのレベルのクラスが存在する。中間クラスは、スーパークラスを継承する。サブクラスは、中間クラスを継承する。A、B、Cの3つのクラスがある場合、Aはスーパークラス、Bは中間クラスとなります。そして、BはAを、CはBを継承する。これが多段階継承である。
多重継承では、多くのスーパークラスと1つのサブクラスが存在する。C++では多重継承がサポートされていますが、JavaやCのようなプログラミング言語ではサポートされていません。これらの言語では、多重継承を実現するためにインターフェイスが使用されます。
スーパークラスと呼ばれるクラスがあり、BとCがサブクラスである場合、これらのサブクラスはクラスAのプロパティとメソッドを継承することができます。このような継承を階層的継承と呼びます。
もう一つ、混合相続という特殊な相続があります。多階層と多重継承の組み合わせである。A、B、C、Dがクラスで、BがAを、DがBとCを継承する場合、混合継承になります。
OOPにおけるポリモーフィズムとインヘリタンス | |
ポリモーフィズムとは、あるオブジェクトが複数の振る舞いをする能力のことである。 | 継承とは、既存のクラスのプロパティとメソッドを使用して新しいクラスを作成することです。 |
使用方法 | |
ポリモーフィズムは、コンパイル時や実行時にオブジェクトがどの形式のメソッドを呼び出すかに利用されます。 | コードの再利用性を高めるために、継承を行う。 |
インプリメンテーション | |
ポリモーフィズムはメソッドに実装されています。 | 継承はクラスで実装されます。 |
カテゴリー | |
ポリモーフィズムは、オーバーロードと上書きに分けられる。 | 継承は、単一レベル継承、多レベル継承、階層継承、混合継承、多重継承に分類される。 |
オブジェクト指向プログラミングにおいて、ポリモーフィズムと継承は重要な概念である。OOPにおけるポリモーフィズムと継承の違いは、ポリモーフィズムが複数の形態に対する汎用的なインタフェースであるのに対し、継承は既存のクラスのプロパティとメソッドを用いて新しいクラスを作成することである。この2つの概念は、ソフトウェア開発において広く用いられている。