Bukankah kopling rendah dan kohesi tinggi saling bergantung satu sama lain?

Saya seharusnya menulis dua versi kode yang sama. Satu dengan kopling rendah dan kohesi tinggi dan satu lagi masih dengan kopling rendah namun kali ini dengan kohesi rendah. Saya tidak begitu mengerti apa bedanya? Bagaimana saya bisa memiliki kopling rendah dan kohesi rendah? Mereka tampaknya begitu terkait sehingga hal ini tidak mungkin dilakukan.

Bisakah seseorang menjelaskan hal ini? Mungkin dengan sebuah contoh? Terima kasih!


person qwerty qwerty    schedule 21.04.2015    source sumber


Jawaban (7)


Singkatnya:

Kohesi dalam rekayasa perangkat lunak, seperti dalam kehidupan nyata, adalah seberapa banyak elemen-elemen yang membentuk keseluruhan (dalam kasus kita, katakanlah sebuah kelas) dapat dikatakan bahwa mereka benar-benar saling memiliki. Jadi, ini adalah ukuran seberapa kuat keterkaitan setiap fungsi yang diungkapkan oleh kode sumber modul perangkat lunak.

Salah satu cara untuk melihat kohesi dalam kaitannya dengan OO adalah jika metode di kelas menggunakan salah satu atribut privat.

Sekarang pembahasannya lebih besar dari ini tetapi Kohesi Tinggi (atau tipe kohesi terbaik - kohesi fungsional) adalah ketika bagian-bagian dari sebuah modul dikelompokkan karena semuanya berkontribusi pada satu tugas modul yang terdefinisi dengan baik.

Penggabungan dengan kata sederhana, adalah seberapa banyak satu komponen (sekali lagi, bayangkan sebuah kelas, meskipun belum tentu) mengetahui cara kerja bagian dalam atau elemen dalam komponen lainnya, yaitu berapa banyak pengetahuan yang dimilikinya tentang komponen lainnya.

Kopling longgar adalah metode menghubungkan komponen-komponen dalam suatu sistem atau jaringan sehingga komponen-komponen tersebut saling bergantung satu sama lain seminimal mungkin…

Panjangnya:

Saya menulis postingan blog tentang ini. Ini membahas semua ini secara lebih rinci, dengan contoh, dll. Ini juga menjelaskan manfaat mengapa Anda harus mengikuti prinsip-prinsip ini. Saya pikir itu bisa membantu...

person TheBoyan    schedule 23.04.2015

Kohesi dan penggabungan adalah properti cara Anda mengatur item.

Mari kita ambil contoh fisik. Sekarang anggaplah Anda mempunyai bola bisbol, bola tenis, bola kriket, bola kroket, bola lacrosse, dan bola bilyar. Misalkan Anda juga memiliki tongkat baseball, raket tenis, tongkat kriket, palu kroket, tongkat lacrosse, dan tongkat biliar. Jika Anda mengurutkan kedua belas objek ini secara acak ke dalam enam pasang objek dalam kantong, Anda mungkin akan memiliki organisasi dengan kopling rendah dan kohesi rendah. Untuk lebih konkretnya, katakanlah enam tas berisi:

  1. bisbol, isyarat biliar
  2. bola lacrosse, raket tenis
  3. bola bilyar, pemukul kriket
  4. bola tenis, tongkat baseball
  5. bola kroket, tongkat lacrosse
  6. bola kriket, palu kroket

Organisasi ini memiliki kohesi yang rendah karena benda-benda yang ada di setiap tas tidak berhubungan. Organisasi ini memiliki penggandengan yang moderat karena kepadatan hubungan antara isi tas yang berbeda adalah sedang (tetapi seperti spageti) -- enam tautan (satu untuk setiap pasangan pemukul bola olahraga) dari kemungkinan 21. Jika Anda ingin contoh genap kopling yang lebih rendah Anda bisa mulai dengan jumlah pasang objek olahraga yang lebih banyak

Pengorganisasian yang jelas dari benda-benda ke dalam kantong

  1. bisbol, tongkat baseball
  2. bola tenis, raket tenis
  3. bola kriket, pemukul kriket
  4. bola kroket, palu kroket
  5. bola lacrosse, tongkat lacrosse
  6. bola bilyar, tongkat biliar

memiliki kopling yang lebih rendah lagi (kopel nol) karena tidak ada satupun isi tas yang berhubungan dengan isi tas lainnya. Memiliki kohesi yang tinggi karena isi tas saling berkaitan satu sama lain.

person I-Lin Kuo    schedule 21.04.2015

Kopling dan Kohesi adalah dua konsep yang mirip tetapi tidak sama. Desain Anda harus memiliki:

  1. Kopling Rendah: Artinya, kelas Anda tidak boleh terlalu bergantung pada kelas lain (khususnya kelas konkret). Anda harus memisahkannya sebanyak mungkin. Decoupling membantu penggunaan kembali (tujuan rekayasa perangkat lunak OO). Karena ketika Anda menggunakan kembali kelas-kelas tersebut, Anda tidak perlu membawa kelas lain bersama kelas Anda untuk membuatnya berfungsi. Banyak pola desain seperti Facade memenuhi tujuan ini.

  2. Keterpaduan Tinggi: Artinya kelas Anda tidak boleh menyertakan banyak tugas yang tidak berhubungan. Ketika Anda meningkatkan kohesi, pemahaman kode menjadi lebih mudah karena kelas melakukan beberapa tugas yang koheren. Hal ini juga meningkatkan kegunaan kembali. Beberapa pola desain seperti Visitor memiliki tujuan ini.

Selanjutnya saya berikan 3 contoh kelas yang mungkin lebih masuk akal :

#include <Document>
#include <Printer>
#include <SpellCheker>
class HighCoupling{
    // This class need other class to be usable
    Document *doc;
    Printer *activePrinter;
    CretaeDocument() { /*...*/ }
    SaveDocument() { /*...*/ }
    PrintDocument() { /*...*/ }    
    CheckSpell() { /*...*/ }    
};

#include <Document>
class LowCouplingHighCohesion {
    // This class don't need other classes
    // This class is a specialist on some task
    CretaeDocument() { /*...*/ }
    SaveDocument(Format *) { /*...*/ }
    LoadDocument() { /*...*/ }
};

#include <Document>
class LowCouplingLowCohesion {
    // This class don't need other classes
    // This class do many unrelated things
    CretaeDocument() { /*...*/ }
    SaveDocument() { /*...*/ }
    OpenDocument() { /*...*/ }
    Undo() { /*...*/ }
    ChangeDocumentBackground()  { /*...*/ }
    SearchInDocument() { /*...*/ }
};
person Emadpres    schedule 21.04.2015

Kopling dan kohesi adalah dua ukuran berbeda dari modul perangkat lunak.

Coupling adalah deskripsi bagaimana dua kelas berinteraksi. Jika dua kelas saling bergantung satu sama lain, mereka menunjukkan keterkaitan erat; jika dua kelas dapat digunakan secara independen satu sama lain, mereka menunjukkan penggandengan longgar. Kopling longgar lebih disukai karena cocok untuk komponen yang dapat digunakan kembali dan mudah dirawat.

Kohesi adalah deskripsi bagaimana komponen kelas tunggal menjadi satu. Kelas yang berisi metode yang tidak ada hubungannya satu sama lain menunjukkan kohesi rendah; kelas yang berisi metode yang serupa secara logis menunjukkan kohesi tinggi. Kohesi yang tinggi mengarah pada kelas-kelas terfokus yang melayani tujuan yang jelas.

Hubungan antara kopling dan kohesi bersifat simbiosis. Jika dua kelas digabungkan secara ketat, kemungkinan besar mereka tidak memiliki tanggung jawab yang jelas dan oleh karena itu akan menunjukkan kohesi yang rendah. Sebaliknya, jika sebuah kelas sangat kohesif, tujuannya sudah terdefinisi dengan baik dan lebih mudah untuk digunakan dengan kelas-kelas lain dengan cara yang menghindari penggabungan dengan kelas-kelas tersebut.


Untuk tugas khusus Anda, mulailah dengan menulis kode yang "baik" - kopling rendah dan kohesi tinggi. Untuk mengubahnya menjadi sesuatu dengan kopling rendah dan kohesi rendah, pertahankan kelas-kelas independen satu sama lain tetapi ubah fungsinya. Buat kelas Utilitas dengan sejumlah metode yang tidak terkait. Masukkan semua metode yang dimulai dengan vokal ke kelas lain. Lakukan sesuatu yang mencegah kelas mana pun memiliki tujuan yang jelas.

Selama Anda menjaga agar kelas-kelas tersebut tidak bergantung pada satu sama lain, Anda membuat kode yang menunjukkan penggandengan rendah namun juga memiliki kohesi rendah.

person BJ Myers    schedule 21.04.2015

Katakanlah misalnya Anda memiliki dua kelas yang hanya akan berfungsi jika kedua kelas tersebut ada. Kesamaan fungsionalitas dalam suatu kelas disebut kohesi, bagaimana hal-hal menjadi satu, tetapi bagaimana mereka berinteraksi disebut penggandengan.

Jadi jika Anda menulis sebuah program yang memiliki kopling rendah dan kohesi tinggi, itu berarti kelas-kelas dari program tersebut mudah digunakan dan digunakan kembali serta internal kelas tersebut menjadi satu. Jadi kelas-kelas tersebut diisi dengan metode yang menunjukkan kesamaan.

Dengan cara ini, lebih mudah untuk mengubah bagian program tanpa harus mengubah seluruh kode di banyak tempat. Jadi kopling secara umum adalah istilah yang menggambarkan betapa mudah atau sulitnya implementasi dan kohesi digunakan untuk mengukur kesamaan antar metode dalam suatu kelas. Jadi jika Anda ingin membuat sesuatu dengan kopling rendah dan kohesi rendah, Anda harus membuat sesuatu yang mudah diimplementasikan ke dalam program, tetapi mengacaukan enkapsulasinya.

person Community    schedule 21.04.2015
comment
Kohesi bukan tentang beberapa kelas yang bekerja sama - ini adalah ukuran kesamaan metode dalam satu kelas. - person BJ Myers; 21.04.2015
comment
ya kamu benar, aku selalu mencampuradukkan hal ini. Terima kasih atas komentarnya, saya akan mencoba mengeditnya sebentar. - person ; 21.04.2015

Perbedaannya terletak pada maknanya.

  1. Kandungan mengacu pada sesuatu yang memiliki makna negatif. Jadi, menurut aturan SOLID Anda harus mencoba membangun aplikasi Anda sedemikian rupa cara itu Digandeng Secara Longgar. Misalnya, Pola Gof (misalnya, Pabrik Abstrak) dan Wadah DI (seperti MS Unity atau NInject di dunia .NET) dapat membantu Anda mencapai hal ini. Kode yang digabungkan secara longgar berarti jika Anda perlu memasukkan kelas baru ke dalam aplikasi Anda (atau, katakanlah seperti ini - jika Anda perlu mengubah satu kelas ke kelas lainnya), maka Anda dapat melakukannya dengan mudah tanpa banyak usaha.

  2. Kohesi mengacu pada sesuatu yang memiliki makna positif. Jadi, seperti yang mungkin Anda duga, Anda harus mencoba membangun aplikasi Anda sedemikian rupa sehingga dapat menerapkan Kohesi Tinggi. Apa artinya? Ini mengacu pada interaksi antara berbagai modul aplikasi Anda. Misalnya, anggaplah aplikasi Anda memiliki dua modul:

    • Export module - exports some data into an xml file
    • Impor modul - mengimpor beberapa data dari file xml

Jika modul Impor berhasil mengimpor hampir semua yang diekspor oleh modul Ekspor, berarti Anda mengatur interaksi yang baik di antara keduanya dan kohesi di antara keduanya tinggi.

person Witcher    schedule 21.04.2015
comment
Kohesi bukan tentang bagaimana dua modul berinteraksi - ini tentang pengelompokan perilaku yang logis ke dalam satu modul. - person BJ Myers; 21.04.2015

Kebalikannya sama, Kopling Rendah = Kohesi Tinggi.

person Ronald    schedule 21.04.2015
comment
Mengapa kamu mengatakan itu? Menurut GRASP keduanya dapat memenuhi syarat untuk desain OO secara terpisah. - person Emadpres; 21.04.2015
comment
Ini tidak benar. Kopling dan kohesi adalah pengukuran yang berbeda dengan hubungan simbiosis - kohesi yang tinggi memudahkan penerapan kopling longgar. - person BJ Myers; 21.04.2015