Untuk 'kelas' dalam bahasa pemrograman modern, mis. Java/C#/C++/Python..., berisi data dan logika di satu tempat. Namun, menurut 'pemisahan perhatian', sepertinya kita tidak boleh mencampur data dengan logika. Saya tahu keduanya benar, tetapi bagaimana menjelaskan dua ide yang tampaknya bertentangan?

0
zcb 6 Januari 2021, 11:40

3 jawaban

Jawaban Terbaik

... menurut 'pemisahan perhatian', sepertinya kita tidak boleh mencampur data dengan logika ...

Itu hanya palsu. Kami tidak menganggap "data" dan "logika" sebagai masalah sejak awal. Tidak ada dalam artikel tertaut yang menunjukkan bahwa ada orang yang pernah atau pernah mempertimbangkan hal ini.

Perhatikan contoh pertama yang diberikan dalam tautan Anda sendiri: tumpukan protokol Internet.

  • Lapisan TCP bertanggung jawab atas data status aliran TCP dan manajemen jendela TCP, logika retrans, dll.

  • Perhatian adalah komunikasi berorientasi aliran yang andal, dan itu membutuhkan data dan logika.

Memang artikel ini tidak menjelaskan apa yang maksud dengan "keprihatinan", kecuali dengan membuat daftar contoh - mungkin karena sulit untuk memberikan definisi tunggal. Kutipan asli Dijkstra secara eksklusif berkaitan dengan masalah lintas sektoral, seperti kebenaran atau efisiensi di seluruh program. OO lebih baik dalam mewakili masalah non-lintas-sektoral, seperti aliran yang dapat diandalkan atau semacam logger atau wadah asosiatif.


Catatan Ada satu konteks di mana kita mungkin menganggap "data" dan "logika" sebagai perhatian - ketika kita menulis program yang mengoperasikan pada data dan logika, seperti kompiler. Namun kita harus membedakan logika & data yang digunakan dalam implementasi program itu sendiri dari objek Logika dan Data yang dimanipulasi saat runtime. Kecuali, mungkin, itu ditulis dalam LISP.

3
Useless 6 Januari 2021, 09:42

Kelas harus, dalam istilah yang sangat mendasar, berisi data dan logika yang memanipulasi data itu.

Gagasan pemisahan kekhawatiran adalah bahwa area fungsionalitas yang tidak terkait harus tetap terpisah, mis. data tentang nama seseorang alamat dan nomor telepon harus terpisah dari data tentang peran bisnis mereka dalam suatu perusahaan.

Tetapi logika data dan untuk alamat dll. harus disimpan bersama dalam satu kelas, dan logika data dan untuk peran bisnis harus disimpan bersama di kelas lain.

Ini sering digambarkan sebagai Prinsip Tanggung Jawab Tunggal (SRP). Lihat di sini: https://youtu.be/IrcMr0Xqz8Q

1
Jasper Kent 6 Januari 2021, 08:46

Memisahkan data dan logika ke kelas yang berbeda harus dievaluasi berdasarkan kasus per kasus. Misalnya, objek transfer data biasanya hanya membawa data sementara layanan aplikasi menggunakan objek transfer data untuk melakukan tugas. Itu semua tergantung pada pola dan arsitektur yang Anda gunakan untuk situasi tersebut.

0
basar 6 Januari 2021, 09:31