Saya memiliki masalah dalam memahami pernyataan itu low in coupling and high in cohesion
. Saya sudah googled dan banyak membaca tentang ini, tetapi masih merasa sulit untuk dipahami.
Apa yang saya pahami High cohesion
artinya, bahwa kita harus memiliki kelas yang khusus untuk melakukan fungsi tertentu. Semoga ini benar? Seperti kelas validasi kartu kredit, yang khusus untuk memvalidasi kartu kredit saja.
Dan masih tidak mengerti apa artinya Kopling rendah?
Jawaban:
Apa yang saya percayai adalah ini:
Kohesi mengacu pada sejauh mana unsur-unsur modul / kelas berada bersama, disarankan bahwa kode terkait harus dekat satu sama lain, jadi kita harus berusaha untuk kohesi tinggi dan mengikat semua kode terkait bersama sedekat mungkin. Ini ada hubungannya dengan elemen-elemen dalam modul / kelas.
Kopling mengacu pada sejauh mana modul / kelas yang berbeda bergantung satu sama lain, disarankan agar semua modul harus independen sejauh mungkin, itu sebabnya kopling rendah. Ini berkaitan dengan elemen-elemen di antara berbagai modul / kelas.
Untuk memvisualisasikan seluruh gambar akan sangat membantu:
Tangkapan layar diambil dari Coursera .
sumber
Kohesi dalam rekayasa perangkat lunak, seperti dalam kehidupan nyata, adalah seberapa banyak elemen yang terdiri dari keseluruhan (dalam kasus kami katakanlah sebuah kelas) dapat dikatakan bahwa mereka sebenarnya milik bersama. Dengan demikian, ini adalah ukuran seberapa kuat setiap fungsionalitas yang diekspresikan oleh kode sumber modul perangkat lunak.
Salah satu cara melihat kohesi dalam hal OO adalah jika metode di kelas menggunakan salah satu atribut pribadi.
Sekarang diskusi lebih besar dari ini tetapi Kohesi Tinggi (atau tipe kohesi terbaik - kohesi fungsional) adalah ketika bagian-bagian modul dikelompokkan karena mereka semua berkontribusi pada satu tugas modul yang didefinisikan dengan baik.
Menggabungkan dengan kata-kata sederhana, adalah seberapa banyak satu komponen (sekali lagi, bayangkan sebuah kelas, meskipun tidak harus) tahu tentang cara kerja bagian dalam atau elemen dalam yang lain, yaitu seberapa banyak pengetahuan yang dimiliki komponen lain.
Loose coupling adalah metode interkoneksi komponen-komponen dalam suatu sistem atau jaringan sehingga komponen-komponen tersebut, saling bergantung satu sama lain sejauh mungkin secara praktis ...
Saya menulis posting blog tentang ini. Ini membahas semua ini dengan sangat rinci, dengan contoh-contoh dll. Ini juga menjelaskan manfaat mengapa Anda harus mengikuti prinsip-prinsip ini.
sumber
Dalam perancangan perangkat lunak, kohesi yang tinggi berarti bahwa kelas harus melakukan satu hal dan satu hal dengan sangat baik. Kohesi tinggi terkait erat dengan prinsip tanggung jawab tunggal .
Kopling rendah menunjukkan bahwa kelas harus memiliki dependensi sekecil mungkin. Juga, dependensi yang harus ada harus dependensi yang lemah - lebih memilih ketergantungan pada antarmuka daripada ketergantungan pada kelas beton, atau lebih suka komposisi daripada warisan.
Kohesi Tinggi dan kopling rendah memberi kami kode yang dirancang lebih baik sehingga lebih mudah untuk dipelihara.
sumber
Jawaban singkat dan jelas
sumber
Kopling rendah adalah dalam konteks dua atau banyak modul. Jika perubahan dalam satu modul menghasilkan banyak perubahan pada modul lain maka mereka dikatakan sangat berpasangan. Di sinilah pemrograman berbasis antarmuka membantu. Setiap perubahan dalam modul tidak akan berdampak pada modul lainnya karena antarmuka (rata-rata interaksi) di antara mereka tidak berubah.
Kohesi tinggi- Menyatukan hal-hal serupa. Jadi kelas harus memiliki metode atau perilaku untuk melakukan pekerjaan terkait. Hanya untuk memberikan contoh buruk yang berlebihan: Implementasi antarmuka Daftar tidak boleh memiliki operasi yang terkait dengan String. Kelas string harus memiliki metode, bidang yang relevan untuk String dan juga, implementasi Daftar harus memiliki hal-hal yang sesuai.
Semoga itu bisa membantu.
sumber
Singkatnya cerita, kopling rendah seperti yang saya pahami itu berarti komponen dapat ditukar tanpa mempengaruhi berfungsinya suatu sistem. Pada dasarnya memodulasi sistem Anda menjadi komponen yang berfungsi yang dapat diperbarui secara terpisah tanpa merusak sistem
sumber
Apakah Anda memiliki ponsel pintar? Apakah ada satu aplikasi besar atau banyak yang kecil? Apakah satu aplikasi membalas yang lain? Bisakah Anda menggunakan satu aplikasi saat memasang, memperbarui, dan / atau mencopot pemasangan yang lain? Bahwa setiap aplikasi mandiri adalah kohesi yang tinggi. Bahwa setiap aplikasi independen dari yang lain adalah kopling rendah. DevOps menyukai arsitektur ini karena itu berarti Anda dapat melakukan penyebaran kontinu tanpa mengganggu keseluruhan sistem.
sumber
Warisan atau generalisasi adalah contoh dari kopling tinggi (yaitu saling ketergantungan tinggi). Apa yang saya maksudkan dengan ini adalah bahwa dalam pewarisan sering kali kelas induk mendefinisikan fungsionalitas dasar yang digunakan oleh kelas anaknya dan perubahan metode kelas induk secara langsung berdampak pada kelas anaknya. Oleh karena itu kita dapat mengatakan bahwa ada tingkat saling ketergantungan yang lebih besar antara kelas-kelas.
Realisasi atau menggunakan antarmuka adalah contoh kohesi tinggi (yaitu saling ketergantungan rendah). Apa artinya ini adalah bahwa antarmuka mengajukan kontrak untuk kelas apa pun yang mengimplementasikannya tetapi setiap kelas memiliki hak untuk mengimplementasikan metode yang dinyatakan dalam antarmuka dengan caranya sendiri dan perubahan dalam metode yang dinyatakan dalam satu kelas tidak memengaruhi kelas lain.
sumber
Kohesi - seberapa dekat hubungan semuanya dengan satu sama lain.
Coupling - bagaimana semuanya terhubung satu sama lain.
Mari kita ambil contoh - Kami ingin merancang mobil self-driving.
(1) Kita membutuhkan motor untuk berjalan dengan baik.
(2) Kita perlu mobil untuk berkendara sendiri.
Semua kelas dan fungsi dalam (1) menghidupkan motor dan membuatnya bekerja dengan baik bersama-sama, tetapi tidak membantu menyetir mobil. Jadi kami menempatkan kelas-kelas itu di belakang Engine Controller.
Semua kelas dan fungsi dalam (2) bekerja sangat baik untuk membuat mobil mengarahkan, mempercepat dan mengerem. Mereka tidak membantu mobil menghidupkan atau mengirim bensin ke piston. Jadi kami menempatkan kelas-kelas ini di belakang Driving Controller-nya sendiri.
Kontroler ini digunakan untuk berkomunikasi dengan semua kelas dan fungsi yang tersedia. Kontroler kemudian hanya berkomunikasi satu sama lain. Ini berarti saya tidak dapat memanggil fungsi di kelas piston dari kelas pedal gas untuk membuat mobil melaju lebih cepat.
Kelas pedal harus meminta Pengendali Mengemudi untuk berbicara dengan Pengontrol Engine yang kemudian memerintahkan kelas piston untuk bergerak lebih cepat. Hal ini memungkinkan kami programmer untuk dapat menemukan masalah dan memungkinkan kami untuk menggabungkan program besar tanpa khawatir. Ini karena kodenya semuanya bekerja di belakang controller.
sumber
Kopling Rendah dan Kohesi Tinggi adalah fenomena yang direkomendasikan.
Kopling berarti sejauh mana berbagai modul saling tergantung dan bagaimana modul lainnya terpengaruh pada perubahan beberapa fungsi modul. Kopling rendah ditekankan karena ketergantungannya harus dipertahankan rendah sehingga perubahan yang dibuat paling kecil / dapat diabaikan untuk modul lain.
sumber
Contoh mungkin membantu. Bayangkan sebuah sistem yang menghasilkan data dan memasukkannya ke dalam penyimpanan data, baik file di disk atau database.
Kohesi Tinggi dapat dicapai dengan memisahkan kode penyimpanan data dari kode produksi data. (dan sebenarnya memisahkan penyimpanan disk dari penyimpanan basis data).
Kopling Rendah dapat dicapai dengan memastikan bahwa produksi data tidak memiliki pengetahuan yang tidak perlu tentang penyimpanan data (mis. Tidak menanyakan penyimpanan data tentang nama file atau koneksi db).
sumber
Inilah jawaban dari sedikit sudut teori grafik abstrak:
Mari kita menyederhanakan masalah dengan hanya melihat grafik dependensi (diarahkan) antara objek stateful.
Sebuah jawaban yang sangat sederhana dapat diilustrasikan dengan mempertimbangkan dua kasus pembatasan grafik ketergantungan:
Kasing pembatas pertama : grafik cluster .
Grafik klaster adalah realisasi paling sempurna dari grafik dependensi kohesi tinggi dan kopling rendah (diberikan satu set ukuran kluster).
Ketergantungan antara cluster adalah maksimal (terhubung penuh), dan ketergantungan antar cluster minimal (nol).
Ini adalah ilustrasi abstrak dari jawaban dalam salah satu kasus yang membatasi .
Kasing pembatas ke-2 adalah grafik yang terhubung sepenuhnya, di mana semuanya tergantung pada semuanya.
Realitas ada di antara keduanya, semakin dekat ke cluster cluster semakin baik, dalam pemahaman saya yang rendah hati.
Dari sudut pandang lain : ketika melihat grafik ketergantungan terarah, idealnya harus asiklik, jika tidak maka siklus membentuk kelompok / komponen terkecil.
Satu langkah naik / turun hierarki sesuai dengan "satu contoh" kopling longgar, kohesi ketat dalam perangkat lunak tetapi dimungkinkan untuk melihat prinsip kohesi kopling longgar / ketat ini sebagai fenomena berulang di kedalaman berbeda dari grafik yang diarahkan asiklik (atau pada salah satu dari pohon merentangnya).
Dekomposisi semacam itu dari sistem menjadi hierarki membantu mengalahkan kompleksitas eksponensial (katakanlah setiap cluster memiliki 10 elemen). Kemudian pada 6 lapisan sudah 1 juta objek:
10 cluster membentuk 1 superkluster, 10 superkluster membentuk 1 hypercluster dan seterusnya ... tanpa konsep kohesi yang ketat, kopling longgar, arsitektur hierarkis seperti itu tidak akan mungkin terjadi.
Jadi ini mungkin adalah arti penting sebenarnya dari cerita dan bukan hanya kohesi tinggi, kopling rendah dalam dua lapisan saja. Pentingnya nyata menjadi jelas ketika mempertimbangkan abstraksi tingkat yang lebih tinggi dan interaksinya.
sumber
Saya pikir Anda telah merah definisi begitu banyak tetapi jika Anda masih memiliki keraguan atau Jika Anda masih baru dalam pemrograman dan ingin masuk jauh ke dalam ini maka saya akan menyarankan Anda untuk menonton video ini, https://youtu.be/HpJTGW9AwX0 Ini hanya referensi untuk mendapatkan info lebih lanjut tentang polimorfisme ... Semoga Anda mendapatkan pemahaman yang lebih baik dengan ini
sumber
Kopling Rendah: - Akan membuatnya sangat sederhana. Jika Anda mengubah modul Anda bagaimana pengaruhnya terhadap modul lain.
Contoh: - Jika API layanan Anda ditampilkan sebagai JAR, setiap perubahan pada tanda tangan metode akan memutus panggilan API (Kopling Tinggi / Ketat).
Jika modul Anda dan modul lainnya berkomunikasi melalui pesan async. Selama Anda mendapatkan pesan, tanda tangan perubahan metode Anda akan bersifat lokal untuk modul Anda (kopling rendah).
Tentu saja jika ada perubahan dalam format pesan, klien panggilan perlu melakukan beberapa perubahan.
sumber