Haruskah saya menggunakan pengubah akses default atau tidak - Praktek pengkodean?

8

Biasanya ketika membuat variabel global baru saya tidak mendefinisikan pengubah aksesnya. Jadi sesuai java akan mengadopsi pengubah akses default properti. Ketika saya perlu mengakses variabel itu di luar ruang lingkup standar saya mengubah pengubah aksesnya yang lain biarkan apa adanya. Jadi pertanyaan saya adalah " Apakah saya melakukannya dengan cara yang benar? Apakah normal memiliki variabel akses default? Atau haruskah saya menggunakan pribadi / publik untuk mereka? Apakah praktik pengkodean yang baik untuk tidak menggunakan pengubah akses? "

Harry Joy
sumber

Jawaban:

13

2 hal di sini:

  1. jangan gunakan global :)
  2. itu adalah praktik umum / terbaik untuk menganggap semua bidang bersifat pribadi kecuali ada alasan utama untuk menjadikannya bidang lain, dalam hal ini akses yang paling membatasi harus dipilih (biasanya dilindungi).

Tentu saja selalu ada pengecualian untuk aturan tersebut, tetapi itulah dasar untuk memulai.

jwenting
sumber
Adakah alasan khusus untuk hal pertama? "Jangan gunakan global".
Harry Joy
12
Global dapat diakses dan dimodifikasi dari mana saja di seluruh basis kode. Lebih dari segelintir dari mereka cukup untuk meledakkan kerumitan potensial suatu program di luar kemampuan mental orang waras.
tammmer
Jika mereka bertindak seperti staticdi .NET, mereka juga merusak unit testability; karena unit yang menggunakannya akan SELALU bergantung pada mereka dan tidak ada cara untuk memalsukan mereka untuk mengisolasi unit yang sedang diuji.
StuperUser
1
dan tentu saja mereka dengan cepat menjadi mimpi buruk pemeliharaan. Harus membuat perubahan "kecil" sekali ke aplikasi yang dipenuhi ratusan global (nilai harus memungkinkan input yang lebih lama, sesuatu seperti itu). Kami akhirnya harus mengubah bukan satu atau dua tetapi ratusan sumber, masing-masing di puluhan lokasi.
jwenting
Maaf untuk memilih, tetapi di poin kedua Anda menyarankan terlindungi adalah akses yang paling membatasi. Akses yang paling membatasi adalah pengubah akses default, tidak dilindungi!
oOTesterOo
5

Beberapa prinsip pemrograman umum di sini:

  • Sederhana itu lebih baik
  • Jangan nyatakan yang jelas

...tetapi juga:

  • Eksplisit lebih baik daripada implisit

Saya bukan ahli Java, tetapi aturan umum harus: Jika apa yang terjadi jelas bagi seseorang yang akrab dengan bahasa tanpa eksplisit, gunakan perilaku implisit. Namun jika ini mungkin menempatkan seseorang di jalur yang salah, maka jelaslah hal itu secara eksplisit.

tammmer
sumber
2
Di Jawa, akses standar adalah jenis akses terpisah, jadi jika Anda menambahkan pengubah akses, Anda tidak menyatakan kembali akses, Anda mengubahnya ke hal lain. Itu sebabnya jika Anda benar-benar membutuhkan akses standar eksplisit, satu-satunya cara untuk membuatnya eksplisit adalah dengan menggunakan komentar.
Malcolm
-1

Java tidak memiliki properti otomatis, jadi semua anggota kelas secara umum harus pribadi dengan metode get / set untuk penggunaan publik, jika diperlukan.

Menurut sumbernya (Oracle java Docs) ini adalah pendekatan yang direkomendasikan.

"Gunakan tingkat akses paling ketat yang masuk akal untuk anggota tertentu. Gunakan pribadi kecuali jika Anda punya alasan kuat untuk tidak. Hindari bidang publik kecuali untuk konstanta. Bidang publik cenderung menghubungkan Anda dengan implementasi tertentu dan membatasi fleksibilitas Anda dalam mengubah kode. "

http://download.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

Nickz
sumber
1
Tetapi, bagaimana jika Anda ingin berbagi akses hanya dengan beberapa hal dan bukan segalanya (seperti publichalnya)?