Definisi: Satu objek harus menjaga pemahaman paling sedikit tentang objek lain.
Asal usul masalah: Hubungan antar kelas semakin dekat dan lebih dekat, dan kopling semakin besar. Ketika satu kelas berubah, semakin besar dampaknya pada kelas lain.
Solusi: Minimalkan kopling antar kelas sebanyak mungkin.
Sejak kami bersentuhan dengan pemrograman, kami telah mengetahui prinsip -prinsip umum desain perangkat lunak, kopling rendah dan kohesi tinggi. Apakah itu berorientasi objek atau berorientasi pada proses, derajat kopling harus serendah mungkin untuk meningkatkan tingkat penggunaan kembali kode. Tapi bagaimana cara memprogram kopling rendah?
Tidak peduli seberapa rumit logika itu, untuk kelas dependen, mencoba merangkum logika di dalam kelas, dan tidak mengungkapkan informasi apa pun ke luar kecuali untuk metode publik yang diberikan. Ada juga definisi yang lebih sederhana: hanya berkomunikasi dengan teman langsung. Pertama, mari kita jelaskan apa itu teman langsung; Setiap objek akan digabungkan dengan objek lain. Katakanlah ada hubungan kopling antara kedua objek ini. Katakanlah kedua objek ini memiliki hubungan teman. Ada banyak cara di mana kopling terjadi, seperti ketergantungan, asosiasi, komposisi, agregasi, dll. Di antaranya, kami menyebut kelas yang muncul variabel anggota, parameter metode, dan nilai pengembalian metode yang disebut teman langsung, sedangkan kelas yang muncul dalam variabel lokal bukanlah teman langsung. Dengan kata lain, yang terbaik adalah tidak muncul di dalam kelas sebagai variabel lokal;
Misalnya, di sekolah, ada beberapa guru di dalamnya, bernomor secara berurutan. Ada beberapa siswa di bawah ini, bernomor sekaligus. Sekarang minta untuk mencetak semua ID guru dan siswa.
Pertama, melanggar prinsip kopling rendah dan kohesi tinggi
Kode adalah sebagai berikut.
Paket test1; import java.util.arraylist; import java.util.list; class teacher {privateString id; publicVoidSetId (string id) {this.id = id;} publicString getId () {return id;} class class {private string ID; public void setid (string id) {this. StudentManage {PublicList <Sahasiswa> getAllstudent () {Daftar <Sahasiswa> Daftar = newArrayList <shuents> (); for (int i = 0; i <100; i ++) {student student = new student (); student.setid ("Nomor siswa adalah"+i); list.add (student);} return list;}}}} class (list. {List <Gell Teacher> Daftar = newArrayList <Gell Teacher> (); for (inti = 0; i <100; i ++) {guru guru = guru baru (); guru.setid ("nomor guru"+i); list.add (guru);} daftar kembali;} studentall studentAllPerson (StudentSManAgesDentDentAngArager) {List Siswa; Daftar Siswa (List. {System.out.println (s.getId ());} Daftar <Gell Teacher> List2 = this.getAllTeacher (); for (Teacher T: List2) {System.out.println (t.getId ());}}} public classclient {publicstaticvoidMain (string [] args) {TeacherManAgetM = newteacherManage (); tm.printallperson (new studentManage ());}} Masalah utama dari desain ini sekarang muncul di kelas Guru. Menurut hukum kopling rendah dan kohesi tinggi, ia hanya berkomunikasi dengan teman -teman langsung. Kelas siswa bukan teman langsung di kelas Guru. Kopling hubungan teman yang tidak langsung seperti itu harus dihindari di kelas.
Setelah modifikasi, kode adalah sebagai berikut:
Paket test2; import java.util.arraylist; import java.util.list; class teacher {privateString id; publicVoidSetId (string id) {this.id = id;} publicString getId () {return id;} class class {private string ID; public void setid (string id) {this. StudentManage{publicList<Student> getAllStudent() {List<Student> list=newArrayList<Student>();for (int i=0;i<100;i++) {Student student=new Student();student.setId("Student number is"+i);list.add(student);}return list;}public void printAllStudent() {Daftar <Sahasiswa> list1 = this.getAllStudent (); for (student s: list1) {System.out.println (s.getid ());}}} class TeacherManage {publicList <Gell Teacher> getallTeacher () {list <Teacher> <narraylist <teacher> (); for (inti = 0 = Daftar <100; i newArrayList <teurher> (); for (intti = 0 = daftar <100; i newArrayList <teurher> (); for (intti = 0 = i list = newArrayList <teurher> (); for (intti = 0 = list <treacher> <narraylist <eurher>; Guru (); guru.setId ("Nomor Guru"+i); list.add (guru);} daftar pengembalian;} publicVoidPrintallTeacher () {list <teacher> list2 = this.getAllTeacher (); for (Teacher T: List2) {System.out.println (t.getId ();}} {] {System.out.println (t.getId ());}} {] {public. {TeacherManAgetM = newteacherManage (); tm.printallteacher (); studentManageSM = newstudentManage (); sm.printallstudent ();}}Setelah modifikasi, siswa telah menambahkan metode baru ID siswa dan guru dapat menyebutnya secara langsung. Ini menghindari penggabungan dengan siswa. Niat asli dari prinsip kopling rendah dan kohesi tinggi adalah untuk mengurangi kopling antar kelas. Karena setiap kelas mengurangi dependensi yang tidak perlu, memang mungkin untuk mengurangi hubungan kopling. Namun, semuanya memiliki gelar. Meskipun komunikasi dengan kelas tidak langsung dapat dihindari, untuk berkomunikasi, hubungan pasti akan terjadi melalui "perantara". Menggunakan aturan ini dapat mencapai struktur yang jelas, kohesi tinggi dan kopling rendah,
Kopling dan kohesi adalah dua standar kualitatif untuk kemandirian modul. Saat membagi sistem perangkat lunak menjadi modul, cobalah untuk mencapai kohesi tinggi dan kopling rendah sebanyak mungkin untuk meningkatkan independensi modul, dan meletakkan dasar untuk merancang struktur perangkat lunak berkualitas tinggi.
Ada contoh yang mudah dimengerti: program memiliki 50 fungsi, dan program ini dijalankan dengan sangat baik; Namun, setelah Anda memodifikasi salah satu fungsi, 49 fungsi lainnya perlu dimodifikasi, yang merupakan konsekuensi dari kopling tinggi.
Meringkaskan
Di atas adalah semua konten artikel ini tentang analisis kode dari contoh kode kohesi tinggi dan hukum kopling rendah. Saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!