定義:1つのオブジェクトは、他のオブジェクトの理解を最も少なく保つ必要があります。
問題の起源:クラス間の関係はどんどん近づいており、結合はますます大きくなっています。 1つのクラスが変更されると、別のクラスへの影響が大きくなります。
解決策:クラス間の結合を可能な限り最小限に抑えます。
プログラミングと接触して以来、ソフトウェア設計、低カップリング、高い結束の一般的な原則を知っています。オブジェクト指向であろうとプロセス指向であろうと、カップリングの程度は、コードの再利用率を改善するために可能な限り低くする必要があります。しかし、低カップリングをプログラムする方法は?
依存クラスのロジックがどれほど複雑であっても、クラス内のロジックをカプセル化して、提供されたパブリック方法を除いて外部に情報を開示しないようにしてください。より簡単な定義もあります。直接の友人とのみコミュニケーションをとることです。まず、直接の友人が何であるかを説明しましょう。各オブジェクトは、他のオブジェクトと組み合わされます。これら2つのオブジェクトの間に結合関係があるとしましょう。これらの2つのオブジェクトには友人の関係があるとしましょう。依存関係、関連性、構成、集約など、カップリングが発生する多くの方法があります。その中には、メンバー変数、メソッドパラメーター、および直接フレンズと呼ばれるメソッドリターン値が表示されるクラスを呼び出します。つまり、クラス内にローカル変数として表示されないことが最善です。
たとえば、学校では、数人の教師がいます。以下には、一度に番号が付けられている学生がいます。ここで、すべての教師と学生のIDを印刷するように依頼します。
まず、低カップリングと高い結束の原理に違反します
コードは次のとおりです。
パッケージtest1; import java.util.arraylist; import java.util.list; class teacher {privatestring id; publicvoidsetid(string id){this.id = id;} publicstring getId(){return id;}} class desudent {private string id; public setid(public inid;} clessid; sustentmanage {publiclist <sustent> getallstudent(){list <sustent> list = newArrayList <thense>(); {list <teacher> list = newArraylist <teacher>(); for(inti = 0; i <100; i ++){教師教師= new Teacher(); setid( "Teacher number"+i); list.add(teacher);} public void printAllperson(StudentmanageStudentudmanager){for) s:list1){system.out.println(s.getid());} list <teacher> list2 = this.getallteacher(); public classclient {publicStaticVoidMain(string [] args){teachermanagetm = newteachermanage(); tm.printallperson(new StudentManage());}}}このデザインの主な問題は、Teachermanageクラスに表示されています。低カップリングと高い結束法によれば、それは直接の友人とのみ通信します。学生クラスは、Teachermanageクラスの直接の友人ではありません。このような直接的な友人関係の結合は、クラスでは避けるべきです。
変更後、コードは次のとおりです。
パッケージTest2; Import java.util.arraylist; import java.util.list; class teacher {privatestring id; publicvoidsetid(string id){this.id = id;} publicstring getId(){return id;}} class desudent {private string id; public setid(public id;} = clistid; StudentManage {publiclist <sudtent> getAllStudent(){List <Student> list = newArrayList <Student>(); for(int i = 0; i <100; i ++){desute student = new Student(); student.setID( "desution as is"+i); list.add(desute)return list;} public {list <sustent> list1 = this.getallstudent(); for(sustent s:list1){system.out.println(s.getid());}}} {publiclist <teacher> getAllteacher(){list <tuesy> list = newArraylist <fourte <teacher>(); Teacher( {Teachermanagetm = newteachermanage(); tm.printallteacher(); sustentmanagesm = newStudentManage(); sm.printallStudent();}}}変更後、生徒は学生IDの新しい方法を追加し、教師はそれを直接呼び出すことができます。これにより、学生との結合が回避されます。低カップリングと高い凝集の原則の当初の意図は、クラス間の結合を減らすことです。各クラスは不必要な依存関係を減らすため、結合関係を減らすことは実際に可能です。ただし、すべてに学位があります。間接的なクラスとのコミュニケーションは回避できますが、コミュニケーションをとるために、関係は必然的に「仲介者」を通じて発生します。このルールを使用すると、明確な構造、高い凝集、低カップリングを実現できます。
結合と凝集は、モジュールの独立性のための2つの定性的標準です。ソフトウェアシステムをモジュールに分割するときは、モジュールの独立性を改善するために、可能な限り高い結束と低カップリングを実現し、高品質のソフトウェア構造を設計するための基盤を築くようにしてください。
理解しやすい例があります。プログラムには50の機能があり、このプログラムは非常にうまく実行されます。ただし、関数の1つを変更すると、他の49の関数を変更する必要があります。これは高い結合の結果です。
要約します
上記は、高い凝集法と低カップリング法のコードの例のコード分析に関するこの記事のすべての内容です。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!