再利用性の概念を使用して、以前のバージョンを使用して新しいソフトウェアを作成することは、プログラミングでは再利用可能なコードと呼ばれます。
主なポイント
- コンポジションは、単純なオブジェクトを組み合わせて複雑なオブジェクトを構築しますが、継承は既存のクラスから新しいクラスを作成します。
- 構成により、オブジェクトを変更する際の柔軟性が向上しますが、継承により、より厳格で階層的な構造が提供されます。
- 合成はコードの再利用を促進し、結合を減らし、より高度な抽象化を可能にするため、継承よりも好まれます。
構成と継承
合成には、単純なものから複雑なオブジェクトを構築することが含まれ、その結果、クラス間に「has-a」関係が生じます。 継承により、あるクラスが別のクラスからプロパティとメソッドを継承できるようになり、「is-a」関係が確立され、コードの再利用性が促進されます。

以前に公開された適切に設計されたクラスをコンポーネントとして利用して複雑なクラスを構築するのは簡単なので、オブジェクトを別のクラス内のフィールドとしていつでも使用できます。
OOP では、継承とは、あるエンティティが別のエンティティの特性を取得するプロセスを指します。これは、OOP でコードの再利用を強制する最も効果的な方法の 1 つです。
比較表
比較のパラメータ | 構成 | 継承 |
---|---|---|
意義 | コンポジションで利用したい型を宣言するだけで、実行時に変化する可能性のあるいくつかの実装を格納できます。 | 採用するクラス (スーパークラス) を継承で定義し、実行時に変更することはできません。 |
クラス結合 | 異なるクラスの機能を組み合わせる機能は、コンポジションによって提供されます。 | この場合、拡張できるクラスは XNUMX つだけです。 つまり、Java では多重継承が有効にならないため、多くのクラスを拡張できません。 |
Functionality | コンポジションを使用すると、使用しているクラスが親クラスか子クラスかを気にすることなく、その機能をテストできます。 | 継承では、子クラスをテストするために親クラスを使用する必要があります。 |
コードの再利用 | コンポジションのおかげで、最終クラスのコードでさえ再利用できます。 | 最終クラスは継承によって拡張できません。 |
関係 | それは「ある」状況です。 | それは「ある」状況です。 |
コンポジションとは?
構成は、所有権が暗黙的に示される集約の形式です。 あるオブジェクトが別のオブジェクトに依存しているため、依存関係が存在します。 学校のオブジェクトと教室のオブジェクトについて考えてみましょう。
何らかの形であるオブジェクトの特性を別のオブジェクトの機能に組み込む必要がある場合、その関係には構成が必要です。
構成は、別のオブジェクト内のオブジェクトの使用として説明されます。 エンティティは、任意のクラスのフィールドとして定期的に使用できます。 コンポジションでは、クラスの一部であるエンティティを使用します。

継承とは何ですか?
継承とは、新しいクラスが既存のクラスの属性とメソッドを使用することです。 この既存のクラスは、親クラス、スーパークラス、または基礎クラスと呼ばれます。
新しいクラスを構築したいが、必要なコードの一部を含むクラスが存在するような場合は、現在のクラスから新しいクラスを抽出できます。

構成と継承の主な違い
- final クラスのコードもコンポジションのおかげで再利用できます。一方、final クラスは継承によって拡張することはできません。
- 合成は「ある」状況ですが、継承は「ある」状況です。