Javaのコンポジションとは? 例を挙げて
公開: 2023-01-27目次
Java での関連付けの基本:
アソシエーションは、Java では、個別のオブジェクトを使用した 2 つの個別のクラス間の相互接続として定義できます。 Java アソシエーションによって管理される関係のタイプは次のとおりです。
- 1 対 1: 親クラスごとに 1 つの派生クラスのみが存在します。
- 一対多: 1 つの親クラスが複数の子クラスを持つ場合があります。
- 多対一: 1 つの子クラスを複数のスーパークラスに関連付けることができます。
- 多対多: 多数の親クラスを単一の子クラスに関連付けることができ、より多くの子クラスを単一の親クラスに関連付けることができます。
関係が確立されると、派生クラスはそれぞれの基本クラスと通信して、それらの特性とプロパティを再利用します。 Java には 2 種類の関連付けがあります。 それらは集約と合成です。
Java での集計は、構成と比較して、より一般化されたプロセスです。 これらの形式は、クラス間でサポートされる関係のタイプに基づいています。
Java でのコンポジションの概要:
Has-A 関係を実装する Java の設計手法は、コンポジションと呼ばれます。 継承のプロセスは、コードを再利用するために使用されます。 Java での合成は、他のオブジェクトを参照するインスタンス変数を使用して行うことができます。 オブジェクトが別のオブジェクトを構成し、構成オブジェクトが主オブジェクトの存続なしには存在できない場合、そのような関係は合成と呼ばれます。 より具体的には、構成は、インスタンス変数の助けを借りて、2 つ以上のクラス間の参照を記述する側面です。 ここでは、インスタント変数を使用する前にインスタンスを作成する必要があります。 「構成」という概念を明確に理解するために、ライブラリの例を見てみましょう。
図書館には無数の本があります。 各本には、別々の著者とタイトルがあります。 図書館には、書籍の参照リストも含まれている必要があります。 図書館には、同じ主題またはさまざまな主題に関連する本もいくつかあります。 ここで、ライブラリはメイン クラスに対応し、書籍は派生クラスに関連付けることができます。 本と図書館との間の関連または関係は、構成とみなすことができます。 これは、クラス「Books」がクラス ライブラリに完全に依存しているためです。 たとえば、図書館が破壊された場合、そこにあるすべての本も破壊されます。
無料のテクノロジー コースをチェックして、競争で優位に立ちましょう。
人気のソフトウェア エンジニアリング コースを探す
LJMU & IIITB のコンピューター サイエンスの理学修士号 | カリフォルニア工科大学 CTME サイバーセキュリティ証明書プログラム |
フルスタック開発ブートキャンプ | ブロックチェーンのPGプログラム |
フルスタック開発のエグゼクティブ PG プログラム | |
以下のすべてのコースを表示 | |
ソフトウェア工学コース |
Java でのコンポジションの詳細な説明:
コンポジションは、Java アソシエーションの形式です。 通信する 2 つのクラスは強く相互に関連しており、派生クラスは親クラスに完全に依存しています。 この場合、派生クラスが独立して存在することはできません。 たとえば、車のないエンジンは単独では存在できません。 この関連付けタイプは、集約と比較して非常に制限されています。 コンポジションは設計手法であり、Java 機能と混同しないでください。
コンポジションを使用して、構成メンバーとして他のオブジェクトを持つオブジェクトをモデル化できます。 これらのオブジェクト間には has-a 関係が存在します。 この関連タイプでは、一方のオブジェクトに他方のオブジェクトが含まれます。 したがって、構成オブジェクトは、その存続のために主オブジェクトに完全に依存しています。 そのため、含まれているオブジェクトが台無しになると、構成オブジェクトも影響を受けます。 したがって、構成関係は、全体関係の一部として見ることができ、全体なしに部分が存在することはあり得ません。 つまり、全体を削除すると、その部分も自動的に削除されます。 これは、全体が部分としっかりした関係にあることを意味します。
世界トップクラスの大学が提供するソフトウェア開発コースをオンラインで学びましょう。 エグゼクティブ PG プログラム、上級認定プログラム、または修士プログラムを取得して、キャリアを加速させましょう。
需要の高いソフトウェア開発スキル
JavaScriptコース | コア Java コース | データ構造コース |
Node.js コース | SQLコース | フルスタック開発コース |
NFTコース | DevOps コース | ビッグデータコース |
React.js コース | サイバーセキュリティコース | クラウドコンピューティングコース |
データベース設計コース | パイソンコース | 暗号通貨コース |
継承はJavaの構成とどう違うのですか?
継承の機能は、Java でもコンポジションを使用して実現できることに注意することが重要です。 関連するクラスによるコードの再利用性を提供するために継承と構成の両方が使用されますが、これら 2 つには微妙な違いがあります。 2 つのプロセスの主な違いは、Java の機能である継承とは異なり、構成は設計の手法であることです。 2 つのその他の主な違いを以下の表に示します。
パラメータ | 構成 | 継承 |
基本 | これには、HAS-A 関係が組み込まれています。 | これには、IS-A 関係が組み込まれています。 |
コードの再利用 | コードは複数のクラスで再利用できます。 | 1 つのクラスで拡張できるインターフェイスは 1 つだけなので、コードの再利用は 1 つのクラスでのみ可能です。 |
範囲 | 実行時に簡単に実行できます。 | これらの機能は、コンパイル時に実行する方が適切です。 |
最後の | 最終的なクラスからでもコードの再利用が容易になります。 | 継承の場合、最終クラスのコードを再利用することはできません。 |
メソッド | メソッドは公開されていません。 パブリック インターフェイスは、それらの対話に使用されます。 | 継承は、基本クラスの保護されたメソッドとパブリック メソッドの両方を公開します。 |
集計と構成の違い:
集計 | 構成 |
Java の弱い関連付けの一種です。 | アグリゲーションと比較すると、より強力な関連付けタイプです。 |
派生クラスは基本クラスから独立しています。 したがって、基本クラスが破棄されても、派生クラスは引き続き存在できます。 | 派生クラスは基本クラスに完全に依存しています。 したがって、スーパークラスが破棄された場合、サブクラスは存在できません。 |
子クラスには独自のライフタイムがあります。 | 子クラスの存続期間は、親クラスに依存します。 |
親クラスは、このタイプの関連付けで子クラスを使用します。 したがって、派生クラスは基本クラスによって所有されません。 | この関連付けタイプでは、親クラスが子クラスを所有します。 したがって、親クラスは子クラスの所有者です。 |
これは、HAS-A 関係を構成します。 派生クラスには基本クラスがあります。 | これは一部の関係を構成します。 派生クラスは基本クラスの一部です。 |
最終キーワードは、集計を示すために使用されません。 | final キーワードは、構成を示すために使用できます。 |
例:車には運転手がいます。 | 例:エンジンは車の一部です。 |
ソフトウェア開発に関連する人気記事を読む
Java でデータ抽象化を実装するには? | Javaの内部クラスとは何ですか? | Java 識別子: 定義、構文、および例 |
例を使用して OOPS のカプセル化を理解する | C のコマンド ライン引数の説明 | 2022 年のクラウド コンピューティングの機能と特性トップ 10 |
Java のポリモーフィズム: 概念、型、特徴、および例 | Java のパッケージとその使用方法 | 初心者向け Git チュートリアル: Git をゼロから学ぶ |
Java でコンポジションを使用する利点:
- コンポジションにより、Java コードの再利用が容易になります。
- 多重継承は Java ではサポートされていませんが、この設計手法によってギャップを埋めることができます。
- 構成を使用すると、より良い方法でクラスの能力をテストできます。
- コードは、合成を使用してより柔軟になります。 構成されたクラスの実装は、強化されたバージョンに置き換えることができます。
- コンポジション関係を使用して、プログラムの動作を動的に変更するために、実行時にオブジェクト メンバーを変更できます。
Java での合成の制限:
Java でコンポジションを使用することには、いくつかの欠点があります。 オブジェクト構成の主な欠点は、ユーザーがソース コードを熟考するだけでは、実装されたシステムの動作を理解するのが難しいことです。 オブジェクト構成を使用するシステムは、本質的に非常に動的です。 したがって、オブジェクト合成を使用するシステムの機能を理解するには、ソース コードをより深く分析し、コードを実行して、ソース コード内の個々のオブジェクト間の機能と連携を確認する必要があります。
フルスタックのソフトウェア開発である Java について詳しく知りたい場合は、upGrad と IIIT-B のソフトウェア開発のエグゼクティブ PG プログラム – フルスタック開発のスペシャライゼーションをチェックしてください。 、9 つ以上のプロジェクトと割り当て、IIIT-B 同窓生のステータス、実践的な実践的な絶頂プロジェクト、トップ企業での仕事の支援。