Apa yang bersifat publik, pribadi, dan dilindungi dalam pemrograman berorientasi objek?

94

Apa yang bersifat publik, pribadi, dan dilindungi dalam pemrograman berorientasi objek?

Delirium tremens
sumber
+1, salah satu hal yang menurut saya agak sulit untuk dilakukan

Jawaban:

153

Mereka adalah pengubah akses dan membantu kami menerapkan Enkapsulasi (atau penyembunyian informasi). Mereka memberi tahu compiler kelas lain mana yang harus memiliki akses ke bidang atau metode yang sedang didefinisikan.

private - Hanya kelas saat ini yang akan memiliki akses ke bidang atau metode.

protected - Hanya kelas dan subkelas saat ini (dan terkadang juga kelas paket yang sama) dari kelas ini yang akan memiliki akses ke bidang atau metode.

public - Semua kelas bisa merujuk ke lapangan atau memanggil metode.

Ini mengasumsikan kata kunci ini digunakan sebagai bagian dari deklarasi field atau metode dalam definisi kelas.

Ben S
sumber
4
perhatikan bahwa di java anggota dari paket yang sama dapat mengakses anggota yang dilindungi
Landon Kuhn
2
Ya, dan Java juga memiliki pengubah akses keempat yaitu string kosong. Tidak memberikan pengubah akses apa pun akan mengizinkan akses dari kelas tingkat paket apa pun.
Ben S
1
Saya suka bagian "compiler", karena sebagian besar bahasa yang saya tahu semua fungsi / kelas dapat dengan mudah diakses saat runtime misalnya melalui refleksi di .NET. Oleh karena itu saya cenderung mengatakan, bahwa pengubah akses ini pada dasarnya hanyalah bantuan bagi pemrogram untuk memandu pemrogram lain mengerjakan / dengan kode yang sama dengan menyembunyikan hal-hal tertentu.
merkuro
1
Beberapa bahasa memiliki beberapa kekhususan. Seperti di Delphi, anggota pribadi dapat diakses oleh kelas lain di unit yang sama, dan Anda harus menggunakan private ketat jika Anda tidak menginginkan perilaku ini.
Fabio Gomes
1
C # juga melakukan trik akses-dilindungi-anggota-dari-paket yang sama. Intinya, C # hanyalah Microsoft Java
iGbanam
7

Ketiganya adalah pengubah akses dan kata kunci yang digunakan di kelas. Apa pun yang dideklarasikan di depan umum dapat digunakan oleh objek apa pun di dalam kelas atau di luar kelas, variabel pribadi hanya dapat digunakan oleh objek di dalam kelas dan tidak dapat diubah melalui akses langsung (karena dapat diubah melalui fungsi seperti fungsi teman) Apa pun yang didefinisikan di bawah bagian dilindungi dapat digunakan oleh kelas dan kelas turunannya.

monica
sumber
6

Mereka sebenarnya bukan konsep melainkan kata kunci spesifik yang cenderung muncul (dengan semantik yang sedikit berbeda) dalam bahasa populer seperti C ++ dan Java.

Pada dasarnya, mereka dimaksudkan untuk memungkinkan kelas membatasi akses ke anggota (bidang atau fungsi). Idenya adalah bahwa semakin sedikit satu jenis yang diizinkan untuk mengakses di jenis lain, semakin sedikit ketergantungan yang dapat dibuat. Hal ini memungkinkan objek yang diakses diubah dengan lebih mudah tanpa memengaruhi objek yang merujuk padanya.

Secara garis besar, public berarti setiap orang diperbolehkan mengakses, private berarti hanya anggota dari kelas yang sama yang diperbolehkan untuk mengakses, dan protected berarti anggota subclass juga diperbolehkan. Namun, setiap bahasa menambahkan hal-hal sendiri ke dalamnya. Misalnya, C ++ memungkinkan Anda mewarisi secara non-publik. Di Java, ada juga tingkat akses (paket) default, dan ada aturan tentang kelas internal, dll.

Uri
sumber
2

Item publik adalah item yang dapat diakses dari kelas lain. Anda hanya perlu mengetahui objek apa itu dan Anda dapat menggunakan operator titik untuk mengaksesnya. Diproteksi berarti bahwa kelas dan subkelasnya memiliki akses ke variabel, tetapi tidak kelas lain, mereka perlu menggunakan pengambil / penyetel untuk melakukan apa pun dengan variabel. Private artinya hanya kelas itu yang memiliki akses langsung ke variabel, yang lainnya memerlukan metode / fungsi untuk mengakses atau mengubah data itu. Semoga ini membantu.

mnuzzo
sumber
1

seperti di atas, tetapi secara kualitatif:

private - least access, best encapsulation
protected - some access, moderate encapsulation
public - full access, no encapsulation

semakin sedikit akses yang Anda berikan, semakin sedikit detail implementasi yang bocor dari objek Anda. lebih sedikit kebocoran semacam ini berarti lebih banyak fleksibilitas (alias "kopling longgar") dalam hal mengubah cara suatu objek diimplementasikan tanpa merusak klien dari objek tersebut. ini adalah hal yang sangat mendasar untuk dipahami.

Jon
sumber
0

Singkatnya, dalam pemrograman berorientasi objek, semuanya dimodelkan ke dalam kelas dan objek. Kelas berisi properti dan metode. Kata kunci publik, privat dan dilindungi digunakan untuk menentukan akses ke anggota ini (properti dan metode) kelas dari kelas lain atau .dlls lain atau bahkan aplikasi lain.

Zaki
sumber