Javaでのルーズカップリングとタイトカップリング:ルーズカップリングとタイトカップリングの違い
公開: 2021-05-02目次
序章
Javaは、クラスとオブジェクトを使用するオブジェクト指向プログラミング言語です。 Java言語でクラスやオブジェクトを操作する場合、結合はJavaで重要な役割を果たします。 結合とは、Javaの1つの要素が他の要素について持っている知識の程度を指します。 これは、あるクラスの別のクラスによる使用の程度です。 この記事では、 Javaでの結合、そのタイプ、および例について深く理解します。
Javaでの結合とは何ですか?
結合は、一方のクラスがもう一方のクラスに依存していることに他なりません。 コード内の一方のオブジェクトがプログラム内のもう一方のオブジェクトを使用する場合、Javaではルーズカップリングと呼ばれます。 結合では、2つのクラスまたはオブジェクトが連携し、相互に連携して、事前定義されたタスクを完了します。 これは単に、ある要素が機能を完了するために別の要素を必要とすることを意味します。 一方のクラスがもう一方のクラスのロジックを呼び出す場合、コラボレーションと呼ばれます。
カップリングの種類は何ですか?
Javaでの結合には2つのタイプがあります。
Javaでの緩い結合
2つのクラス、モジュール、またはコンポーネントの相互依存性が低い場合、Javaではルーズカップリングと呼ばれます。 Javaでの緩い結合は、クラスが互いに独立していることを意味します。 一方のクラスがもう一方のクラスについて持っている唯一の知識は、もう一方のクラスが緩い結合でそのインターフェースを介して公開したものです。 オブジェクトを外部から使用する必要がある状況では、緩い結合状況と呼ばれます。
ここでは、親オブジェクトがオブジェクトを使用することはめったになく、オブジェクトは外部ソースから簡単に変更できます。 Javaの緩い結合は、コードの保守と労力を削減するため、密な結合よりも優れています。 一方のクラスを変更しても、もう一方のクラスを変更する必要はなく、2つのクラスが独立して機能します。
例1:プログラムにAとBの2つのクラスを作成したとします。 クラスAは体積と呼ばれ、クラスBはシリンダーの体積を評価します。 クラスAボリュームを変更しても、クラスBを変更する必要はありません。これはJavaではルーズカップリングと呼ばれます。 クラスAでクラスBの変更が必要な場合は、密結合になります。
コード
パッケージの緩い結合; クラスボリューム{ public static void main(String args []){ シリンダーb=new Cylinder(25、25、25); System.out.println(b.getVolume()); } } ファイナルクラスシリンダー{ プライベートintボリューム; 円柱(intの長さ、intの幅、intの高さ){ this.volume=長さ*幅*高さ; } public int getVolume(){ リターンボリューム; } } |
説明:上記の例では、クラスAとクラスBは緩く結合されています。
例2
インポートjava.io.IOException; インターフェース食品{ public void display(); } クラスイタリア語{ 食品; public Italian(Food s){ this.s = s; } public void display(){ System.out.println( "イタリア語"); s.display(); } } クラス中国語は食品を実装します{ public Chinese(){} public void display(){ System.out.println( "中国語"); } } クラスメキシコ人は食べ物を実装します{ public Mexican(){} public void display(){ System.out.println( "メキシコ"); } } パブリッククラステスト{ public static void main(String args [])throws IOException { 食品b=new Chinese(); 食品c=new Mexican(); イタリア語a=new Italian(b); //a.display()はイタリア語と中国語を出力します ディスプレイ(); イタリア語a1=new Italian(c); //a.display()はイタリア語とメキシコ語を出力します a1.display(); } } |
出力
イタリアの 中国語 イタリアの メキシコ人 |
説明:上記の例では、3つのクラスすべてが緩く結合されています。 これは、実装されたサービスのいずれかを注入することにより、フードインターフェイスを使用してサービスを提供できることを意味します。
世界のトップ大学からソフトウェアエンジニアリングの学位をオンラインで取得します。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。
密結合
2つのクラスが相互に大きく依存している場合、それは密結合と呼ばれます。 これは、クラスがあまりにも多くの責任を負う場合、または1つのクラスの変更が他のクラスの変更を必要とする場合に発生します。 密結合では、オブジェクト(親オブジェクト)が使用するために別のオブジェクト(子オブジェクト)を作成します。 親オブジェクトが子オブジェクトの実装方法を詳しく知っている場合、親オブジェクトと子オブジェクトは緊密に結合されていると言えます。
例:プログラムで2つのクラスAとBを作成したとします。 クラスAは体積と呼ばれ、クラスBはシリンダーの体積を評価します。 ボリュームに変更を加えると、同じ変更がクラスBに反映されます。したがって、両方のクラスは相互に大きく依存しており、緊密に結合されていると言えます。
コード
パッケージタイトカップリング; クラスボリューム{ public static void main(String args []){ シリンダーb=new Cylinder(15、15、15); System.out.println(b.volume); }} クラスシリンダー{ public int volume; 円柱(intの長さ、intの幅、intの高さ){ this.volume=長さ*幅*高さ; }} |
出力
3375 |
説明:上記の例では、クラスAとクラスBが結合され、チームとして相互に機能します。
ルーズカップリングとタイトカップリングの違い
次の表に、緩い結合と密な結合の違いを示します。
緩い結合 | 密結合 |
オブジェクトは互いに独立しています。 | 1つのオブジェクトは、タスクを完了するために他のオブジェクトに依存しています。 |
より良いテスト容易性 | テスト容易性は、Javaの緩い結合ほど優れていません。 |
非同期通信 | 同期通信 |
調整が少ない。 2つのクラス間でコードを交換するのは簡単ではありません。 | より良い調整を提供します。 2つのオブジェクト間でコードを簡単に交換できます。 |
インターフェイスの概念はありません | GOFの原則に従ってインターフェースします |
情報の流れが少ない | 詳細情報の流れ |
非常に変更可能 | 変更機能はありません。 |
結論
一言で言えば、 Javaでの緩い結合は、密な結合と比較してはるかに優れています。 コードの柔軟性と再利用性が向上します。 2つのクラスは互いに独立しているため、コードの変更が非常に簡単になります。 また、より優れたテスト容易性を提供します。
ソフトウェア開発の詳細に興味がある場合は、LJMUのコンピュータサイエンスの理学修士をチェックしてください。これは、働く専門家向けに設計されており、12以上のプロジェクトと割り当て、業界メンターとの1対1、500時間以上の学習を提供します。