Jika seseorang menulis kode sehingga variabel internal $ _fields dapat diakses tanpa menggunakan metode pengambil / penyetel, apakah ada istilah yang tepat untuk menggambarkan itu?
Sesuatu yang cukup sopan untuk digunakan dengan manajemen :)
Jika seseorang menulis kode sehingga variabel internal $ _fields dapat diakses tanpa menggunakan metode pengambil / penyetel, apakah ada istilah yang tepat untuk menggambarkan itu?
Sesuatu yang cukup sopan untuk digunakan dengan manajemen :)
Jawaban:
Mengekspos anggota pribadi yang tidak pernah menjadi hal yang baik dalam masyarakat yang sopan ...
Praktek ini adalah kurangnya / enkapsulasi yang buruk.
private
) memiliki implementasi konsep enkapsulasi.
__
untuk mangling nama). Bahasa lain juga dapat memiliki enkapsulasi yang buruk, misalnya, refleksi di Jawa dan pointer aritmatika dalam C ++ untuk mendapatkan variabel pribadi. Python tidak membuat sintaksis yang rumit.
__
nama mangling. Tanpa __
itu, desainnya masih mencerminkan enkapsulasi yang baik. Mengklaim bahwa "publik" berarti "kekurangan / enkapsulasi yang buruk" adalah salah. Konsepnya masih ada. Kode sumber tidak memiliki dekorasi yang sesuai.
Selain kurangnya enkapsulasi yang telah disebutkan oleh Oded, tergantung pada bahasa pemrograman dan paradigma itu juga bisa menjadi "data lama biasa" (di mana itu tidak selalu merupakan antipattern atau kode bau).
Saya pernah mendengar istilah "objek telanjang" sebelumnya.
Ini disebut tas properti.
Biasanya ini digunakan untuk memegang set properti yang mungkin terkait (masing-masing berpotensi menjadi objek kelas yang memiliki penentu akses yang sesuai atau tidak). Tetapi struktur di sekitarnya hanyalah sekumpulan properti.
Ini disebut "tidak mengikuti standar pengkodean khusus".
OP menulis:
variabel internal $ _fields dapat diakses tanpa menggunakan metode pengambil / penyetel
Itu mungkin bertentangan dengan standar Anda, dan (karenanya) itu mungkin kode bau. Tapi itu tidak selalu enkapsulasi yang buruk. Mengekspos variabel internal (seperti dalam "hanya penggunaan internal") lebih dari pengambil dan setters ke dunia luar akan lebih buruk.
Pertanyaannya adalah: apakah harus $_fields
dapat diakses oleh dunia luar?
Jika demikian, kami memiliki kasus di mana Anda akan menambahkan metode pengambil / penyetel. Metode-metode ini tidak merangkum apa pun kecuali fakta yang $_fields
merupakan variabel dari beberapa jenis (sebagai lawan dari sesuatu yang dihitung / diambil / dll dengan cepat). Bergantung pada bahasanya, Anda mungkin masih akan membocorkan jenisnya (alias detail implementasi) ke luar. Apakah Anda selalu ingin getter / setter, atau hanya ketika "diperlukan" adalah masalah standar pengkodean.
Jika $_fields
harus tidak dapat diakses, maka, baik, tidak mengaksesnya. Apakah Anda harus mencegah orang lain mengaksesnya pada tingkat bahasa (pribadi dan teman) atau tidak (yang mungkin memudahkan debugging dalam keadaan tertentu) adalah - lagi - masalah standar pengkodean.
Masalah enkapsulasi sepenuhnya ortogonal untuk ini. Melanggar enkapsulasi sangat mungkin dilakukan dengan getter dan setter. Bahkan lebih mudah untuk menyelinap ke dalam, karena bel alarm kebanyakan orang tidak berdering ketika mereka melihat sekelompok getter dan setter - kode yang tampaknya mengikuti praktik terbaik. Kode, yang mungkin memperkenalkan dependensi lebih banyak pada detail implementasi internal daripada variabel yang dipanggil $_fields
yang tidak ditentukan private
.
Saya penggemar analogi yang buruk: Menyebut enkapsulasi yang buruk itu seperti memanggil seseorang yang memegang senjata pembunuh.
Saya akan memanggil variabel semacam itu variabel anggota publik .
jika metode penyetel / pengambil Anda tidak lebih dari
void setfoo(bar){foo=bar;}
foo getfoo{return foo;}
kemudian hanya membuat variabel kemaluan hanya menyimpan beberapa mengetik di luar beberapa kasus tepi di mana perbedaan itu penting.