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 :)
terminology
scope
PeterB
sumber
sumber
Jawaban:
Mengekspos anggota pribadi yang tidak pernah menjadi hal yang baik dalam masyarakat yang sopan ...
Praktek ini adalah kurangnya / enkapsulasi yang buruk.
sumber
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).
sumber
Saya pernah mendengar istilah "objek telanjang" sebelumnya.
sumber
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.
sumber
Ini disebut "tidak mengikuti standar pengkodean khusus".
OP menulis:
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 ditentukanprivate
.Saya penggemar analogi yang buruk: Menyebut enkapsulasi yang buruk itu seperti memanggil seseorang yang memegang senjata pembunuh.
sumber
Saya akan memanggil variabel semacam itu variabel anggota publik .
sumber
jika metode penyetel / pengambil Anda tidak lebih dari
kemudian hanya membuat variabel kemaluan hanya menyimpan beberapa mengetik di luar beberapa kasus tepi di mana perbedaan itu penting.
sumber