Desain untuk perubahan: Kopling dan kohesi dalam sistem berorientasi objek

Kopling dan kohesi adalah dua istilah yang sering disalahpahami dalam rekayasa perangkat lunak. Ini adalah istilah yang digunakan untuk menunjukkan analisis kualitatif dari modularitas dalam suatu sistem, dan mereka membantu kita untuk mengidentifikasi dan mengukur kompleksitas desain sistem berorientasi objek.

Namun, pengetahuan yang baik tentang keduanya diperlukan untuk membangun sistem yang dapat diskalakan, dapat dikelola, dan dapat diperpanjang seiring waktu. Dalam posting ini, saya akan membahas keduanya; Saya akan menyajikan contoh kode di posting saya yang akan datang tentang topik ini.

Apa perbedaan kohesi dan kopling? Bagaimana konsep kohesi dan penggabungan terkait dengan desain perangkat lunak yang baik atau buruk? Sebelum kita menjelajahi kohesi dan penggabungan serta bagaimana pengaruhnya terhadap desain perangkat lunak, mari kita pahami apa masing-masing konsep ini dan tipenya.

Kopel

Kopling dapat didefinisikan sebagai tingkat saling ketergantungan yang ada antara modul perangkat lunak dan seberapa dekat mereka terhubung satu sama lain. Intinya, kopling menunjukkan kekuatan keterkaitan antara modul perangkat lunak. Ketika kopling ini tinggi, kita dapat berasumsi bahwa modul perangkat lunak saling bergantung, yaitu, mereka tidak dapat berfungsi tanpa yang lain. Ada beberapa dimensi kopling:

  • Penggandengan konten - ini adalah jenis penggandengan di mana modul tertentu dapat mengakses atau mengubah konten modul lainnya. Intinya, ketika sebuah komponen melewati parameter untuk mengontrol aktivitas beberapa komponen lain, ada kopling kontrol di antara dua komponen.
  • Penggandengan umum - ini adalah jenis penggandengan di mana Anda memiliki beberapa modul yang memiliki akses ke data global bersama
  • Stamp coupling - ini adalah jenis kopling di mana struktur data digunakan untuk meneruskan informasi dari satu komponen dalam sistem ke komponen lainnya
  • Kopling kontrol - ini adalah jenis kopling di mana satu modul dapat mengubah aliran pelaksanaan modul lain
  • Penggandengan data - dalam jenis penggandengan ini, dua modul berinteraksi dengan bertukar atau melewatkan data sebagai parameter

Kohesi

Kohesi menunjukkan tingkat intra-ketergantungan di antara elemen-elemen modul perangkat lunak. Dengan kata lain, Kohesi adalah ukuran sejauh mana tanggung jawab satu modul atau komponen membentuk suatu unit yang bermakna. Kohesi adalah dari jenis berikut:

  • Kohesi kebetulan - ini adalah kohesi acak yang tidak direncanakan yang mungkin terjadi akibat pemecahan modul menjadi modul yang lebih kecil.
  • Kohesi logis - ini adalah jenis kohesi di mana beberapa fungsi atau elemen data yang terkait secara logis ditempatkan dalam komponen yang sama
  • Kohesi temporal - ini adalah jenis kohesi di mana elemen-elemen modul dikelompokkan sedemikian rupa sehingga diproses pada titik waktu yang sama. Contohnya bisa menjadi komponen yang digunakan untuk menginisialisasi sekumpulan objek.
  • Kohesi prosedural - ini adalah jenis kohesi di mana fungsi dalam sebuah komponen dikelompokkan sedemikian rupa sehingga memungkinkannya untuk dieksekusi secara berurutan dan membuatnya kohesif secara prosedural
  • Kohesi komunikasional - dalam tipe kohesi ini, elemen-elemen modul secara logis dikelompokkan bersama sedemikian rupa sehingga mereka dieksekusi secara berurutan dan mereka bekerja pada data yang sama
  • Kohesi sekuensial - dalam tipe kohesi ini, elemen modul dikelompokkan sedemikian rupa sehingga keluaran salah satunya menjadi masukan berikutnya - semuanya dijalankan secara berurutan. Intinya, jika keluaran dari satu bagian komponen adalah masukan dari bagian lain, kita katakan bahwa komponen tersebut memiliki kohesi sekuensial.
  • Kohesi fungsional - ini adalah jenis kohesi terbaik dan paling disukai di mana tingkat kohesi paling tinggi. Dalam jenis kohesi ini, elemen modul secara fungsional dikelompokkan ke dalam unit logis dan mereka bekerja bersama sebagai unit logis - ini juga meningkatkan fleksibilitas dan dapat digunakan kembali.

Praktik terbaik

Kopling yang rapat meningkatkan biaya perawatan karena sulit dan perubahan pada satu komponen akan mempengaruhi semua komponen lain yang terhubung dengannya. Jadi, pemfaktoran ulang kode menjadi sulit karena Anda perlu melakukan pemfaktoran ulang semua komponen lain dalam rantai yang terhubung sehingga fungsinya tidak rusak. Proses ini tidak praktis dan membutuhkan banyak tenaga dan waktu yang membosankan. 

Anda harus mendesain kelas yang berisi lebih sedikit jumlah variabel instans, misalnya, desain kelas Anda "baik" jika berisi sejumlah kecil variabel instans. Idealnya, setiap metode di kelas Anda harus memanipulasi satu atau lebih variabel instan ini. Secara teoritis, kelas secara maksimal kohesif jika masing-masing variabel instan kelas digunakan atau dimanipulasi oleh masing-masing metode kelas itu. Ketika kohesi dalam kelas tinggi, metode dan anggota data kelas saling bergantung dan bekerja sama sebagai satu unit logis. Namun, pada kenyataannya tidak mungkin untuk merancang kelas seperti itu atau saya lebih suka mengatakan, tidak disarankan untuk merancang kelas yang kohesif secara maksimal.