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.
Jawaban:
Menurut Emerson Macedo , Hukum Demeter menyatakan sebagai berikut:
Ini berhubungan langsung dengan prinsip kopling rendah karena unit (atau objek) seharusnya, seperti di atas:
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.
sumber
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
Sebagian besar Pengetahuan menyebabkan kopling gila
Di sini kita memiliki
Employee
yang memilikiPerson
yang memiliki 'Alamat'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 dariEmployee
,Person
, danAddress
kelas.Desain kelas yang cacat ini memaksa saya untuk mengetahui semua kelas tersebut dan dengan demikian
myEmployee.me.home.street
memasangkan saya (objek penelepon) ke tidak kurang dari 3 kelas - untuk mendapatkan hanya satu properti!Pengetahuan Paling Tidak Menyelamatkan Hari
Jika saya hanya berbicara dengan
Employee
kelas 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
Employee
kelas kami memperbaiki kopling.jadi
Mengizinkan saya menelepon:
myEmployee.street
-Employee
Employee
- tidak peduli seberapa kompleks strukturnya.Pengetahuan Paling Rendah semua jalan ke bawah
Kami memisahkan myEmployee dari
Person
danAddress
, dan idealnya kita harus terus menerapkan pengetahuan paling sedikit dengan menambahkan properti pass through sehinggaEmployee
hanya berbicaraPerson
danPerson
hanya berbicara denganAddress
sumber
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.
sumber
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.
sumber