Bagaimana Hukum Demeter berlaku untuk sistem berorientasi objek tentang penggandengan dan kohesi? [Tutup]

15

Bagaimana Hukum Demeter diterapkan pada sistem berorientasi objek dengan kopling dan kohesi?

Saya membaca buku "Pengembangan perangkat lunak dan praktik profesional" dan menemukan bab tentang LoD, dan ingin tahu bagaimana prinsip itu diterapkan ke dalam sistem berorientasi objek.

Jeremy
sumber
Saya pernah mewarisi proyek yang memiliki tingkat kopling yang tinggi (topologi bintang). Saya membersihkan beberapa hal dengan menggunakan 'Pola Mediator' untuk membatasi sambungan antara objek dan membiarkan mediator berbicara dengan masing-masing objek. Meskipun masih ada kopling yang terlibat, ini membatasi berapa banyak individu yang dipasangkan. Beberapa orang mungkin ingin lebih mengeksplorasi hal ini jika mereka merasa memiliki masalah kopling tinggi dengan desain mereka.
Jeach

Jawaban:

9

Menurut Emerson Macedo , Hukum Demeter menyatakan sebagai berikut:

  • Setiap unit harus memiliki pengetahuan yang terbatas tentang unit lain: hanya unit "erat" yang terkait dengan unit saat ini.
  • Setiap unit hanya boleh berbicara dengan teman-temannya; jangan berbicara dengan orang asing.
  • Hanya berbicara dengan teman dekat Anda.

Ini berhubungan langsung dengan prinsip kopling rendah karena unit (atau objek) seharusnya, seperti di atas:

  • Tidak saling terkait erat. Hanya yang terdekat saja.
  • Masing-masing hanya boleh berbicara dengan kolaboratornya dan bukan dengan kolaborator kolaborator
  • Hanya berbicara dengan objek berkolaborasi langsung

Salah satu bentuk penggabungan terendah adalah pengiriman pesan, yaitu data dibagi antara objek melalui pemanggilan metode dengan parameter.

Terlebih lagi, dari apa yang dapat saya lihat, Hukum Demeter tidak secara langsung sesuai dengan prinsip kohesi tinggi karena yang hanya menyatakan objek itu sendiri harus mengetahui data apa yang mereka miliki sendiri. Objek dengan kohesi rendah memiliki anggota data yang tidak sering digunakan dalam metode sendiri. Ini lebih tentang isi suatu objek daripada hubungannya dan objek yang berkolaborasi.

Spoike
sumber
8

Kopling, disederhanakan

Ketika suatu objek memanggil metode, properti, dll. Dari objek lain kita katakan objek digabungkan. Kami menyebutnya penggandengan karena sekarang callee tidak dapat mengubah apa pun tentang metodenya sendiri. tanpa melanggar pemanggil .

Dengan demikian, semakin banyak metode kopling, alat peraga. - semakin sulit untuk mengubah kode callee tanpa merusak semua kode yang menggunakannya.

merenungkan kopling

  • Merujuk bahkan prop tunggal., Metode memasangkan dua objek.
  • Jelas kopling diperlukan untuk membuat perangkat lunak.
  • Mengingat sifat 'langkah kunci' dari kopling, kami ingin membatasi dan mengisolasinya. Tujuan ini sejalan dengan pengembang perangkat lunak umum. prinsip
  • Semakin sedikit objek yang harus kita ajak bicara, semakin rendah koplingnya.
  • Jika saya perlu membuat, katakanlah, 20 metode panggilan panggilan yang berbeda lebih rendah jika semua 20 panggilan ke satu kelas / objek, sebaliknya metode yang sama tersebar di beberapa kelas / objek.

Sebagian besar Pengetahuan menyebabkan kopling gila

Di sini kita memiliki Employeeyang memiliki Personyang memiliki 'Alamat'

public class Employee {
    public Person me = new Person();
}
public class Person {
    public Address home = new Address();
}
public class Address {
    public string street;
} 

Untuk mendapatkan jalan Saya harus menelepon: myEmployee.me.home.street. Ini adalah 180 derajat kebalikan dari prinsip pengetahuan paling sedikit. Aku harus tahu tentang internal, struktur komposit dari Employee, Person, dan Addresskelas.

Desain kelas yang cacat ini memaksa saya untuk mengetahui semua kelas tersebut dan dengan demikian myEmployee.me.home.streetmemasangkan saya (objek penelepon) ke tidak kurang dari 3 kelas - untuk mendapatkan hanya satu properti!

Pengetahuan Paling Tidak Menyelamatkan Hari

Jika saya hanya berbicara dengan Employeekelas saya menerapkan prinsip pengetahuan paling sedikit per se, dan dengan demikian kita secara otomatis membatasi kopling hanya untuk kelas itu, dan pada saat yang sama mengisolasi kopling untuk satu kelas itu.

Dengan menambahkan semua properti yang diperlukan di Employeekelas kami memperbaiki kopling.

jadi

public class Employee {
    public Person me = new Person();
    public string street { return me.home.street; }
}

Mengizinkan saya menelepon: myEmployee.street-

  1. Saya "tahu" saja Employee
  2. Saya hanya berpasangan Employee- tidak peduli seberapa kompleks strukturnya.

Pengetahuan Paling Rendah semua jalan ke bawah

Kami memisahkan myEmployee dari Persondan Address, dan idealnya kita harus terus menerapkan pengetahuan paling sedikit dengan menambahkan properti pass through sehingga Employeehanya berbicara Persondan Personhanya berbicara denganAddress

radarbob
sumber
1

Studi ( V. Basili, L. Briand, dan WL Melo. Validasi metrik desain berorientasi objek sebagai indikator kualitas ) telah menunjukkan bahwa kelas dengan set respons yang lebih besar memiliki kecenderungan untuk membuat lebih banyak kesalahan daripada kelas dengan set respons yang lebih kecil karena set respons yang lebih banyak berarti peluang kopling lebih tinggi.

Nilai Hukum Demeter adalah bahwa ia mengurangi respons yang ditetapkan oleh definisi. Metode objek hanya dapat memanggil metode itu sendiri, parameter apa pun yang diteruskan ke metode, metode objek apa pun yang dibuatnya, dan metode objek apa pun yang dipegang secara langsung. Karena set respons lebih kecil, kemungkinan kopling lebih rendah. Karena modul / metode hanya menggunakan referensi yang tersedia langsung ada kohesi yang lebih tinggi.

theD
sumber
1
Studi ( Anquetil, N. dan Laval, J. Legacy Software Restrukturisasi: Menganalisis Kasus Beton ) juga menunjukkan bahwa mengurangi kopling dan meningkatkan kohesi tidak selalu menghasilkan kualitas yang lebih baik. Mengandalkan hasil studi tunggal, kecil dianggap berbahaya.
0

Cukup sederhana; katakanlah A tergantung pada B dan B tergantung pada C. Tanpa Hukum Demeter Anda dapat menggunakan B dan C dalam A tetapi dengan mematuhi hukum ini, A hanya bergantung pada B, itu tidak dapat bergantung pada C.

Ini memungkinkan kopling rendah karena sangat mengurangi jumlah dependensi modul; kohesi, meskipun berbeda dalam konsep dari kopling, dicapai dengan cara yang sama. Dengan memiliki lebih sedikit ketergantungan pada modul, ini menjadi lebih spesifik untuk modul itu dan dengan demikian meningkatkan kohesi. Juga jumlah total modul akan meningkat dan mereka akan menjadi lebih khusus untuk melakukan hal-hal khusus untuk modul tergantung (berlawanan dengan objek dewa) yang secara langsung diterjemahkan ke sistem yang lebih koheren.

m3th0dman
sumber