Ini masalah implementasi versus implikasi . Properti berada di OOP sebelum C ++ atau Java mengenai tempat kejadian (mereka ada di sana, dengan beberapa kekasaran di sekitar, di Simula, dan mereka mendasar bagi Smalltalk). Entitas dengan properti secara konseptual berbeda dari nilai dengan kode yang dilampirkan. Awalan get & set dalam beberapa konvensi bahasa hanya berfungsi untuk memperkeruh perairan; mereka membuat Anda mengetahui perbedaan antara bidang dan properti, dengan asumsi bahwa bidang dapat diakses secara langsung tanpa mendapatkan / mengatur dengan cara yang idiomatis untuk bahasa, dan itu bocor.
Inti dari OOP adalah untuk memperlakukan hal-hal seolah-olah mereka adalah entitas di dunia "nyata", bukan hanya sebagai struct dengan beberapa kode yang bercampur. Pemrogram lain harus tahu, sangat sedikit tentang cara saya telah mengimplementasikan sesuatu, dan sama sekali tidak harus peduli dengan mana dari berbagai nilai yang mereka boleh dapatkan dan / atau atur adalah nyata dan mana yang virtual. Jika Anda menemukan vektor saya, Anda tidak perlu tahu apakah saya menyimpan sudut dan besarnya atau komponen nyata dan imajiner internal ke objek vektor. Jika saya mengubah representasi di V2.0 perpustakaan saya, itu tidak akan memengaruhi kode Anda sama sekali (meskipun Anda mungkin ingin memanfaatkan fitur-fitur baru yang keren). Demikian pula, ada properti yang mungkin dimiliki entitas yang bergantung pada data eksternal entitas, tetapi yang tidak diragukan lagi sifat dari sudut pandang leksikal. Anda bertanya kepada orang-orang "berapa umur Anda", bukan "tolong lakukan perhitungan yang akan mengungkapkan usia Anda kepada saya", meskipun Anda tahu bahwa data yang tersedia untuk "objek" itu adalah tanggal lahir (anggota tidak berubah pribadi) dan hari ini date (properti publik yang bertambah secara otomatis, bergantung pada zona waktu, waktu musim panas, dan Garis Tanggal Internasional). Umur adalah properti, bukan metode, meskipun dibutuhkan beberapa perhitungan untuk sampai ke sana dan tidak dapat (kecuali dalam representasi komputer mainan hal-hal dengan masa hidup yang terbatas secara artifisial) disimpan sebagai bidang. walaupun Anda tahu bahwa data yang tersedia untuk "objek" itu adalah tanggal lahir (anggota tidak berubah pribadi) dan tanggal hari ini (properti publik, properti lingkungan yang bertambah otomatis, bergantung pada zona waktu, waktu musim panas, dan Garis Tanggal Internasional ). Umur adalah properti, bukan metode, meskipun dibutuhkan beberapa perhitungan untuk sampai ke sana dan tidak dapat (kecuali dalam representasi komputer mainan hal-hal dengan masa hidup yang terbatas secara artifisial) disimpan sebagai bidang. walaupun Anda tahu bahwa data yang tersedia untuk "objek" itu adalah tanggal lahir (anggota tidak berubah pribadi) dan tanggal hari ini (properti publik, properti lingkungan yang bertambah otomatis, bergantung pada zona waktu, waktu musim panas, dan Garis Tanggal Internasional ). Umur adalah properti, bukan metode, meskipun dibutuhkan beberapa perhitungan untuk sampai ke sana dan tidak dapat (kecuali dalam representasi komputer mainan hal-hal dengan masa hidup yang terbatas secara artifisial) disimpan sebagai bidang.
Daripada memikirkan properti sebagai anak haram bidang dan metode, itu jauh lebih memuaskan untuk hal metode sebagai jenis properti khusus - hal-hal yang entitas Anda dapat lakukan daripada hal-hal yang mereka lakukan. Kalau tidak, Anda tidak berurusan dengan objek / entitas secara konseptual, Anda berhadapan dengan koleksi data yang memiliki kode yang melekat padanya. The implementaions mungkin identik, tetapi implikasi yang berbeda.
Seharusnya tidak perlu dikatakan, bahwa abstraksi ini harus dibayar mahal. Jika seorang programmer yang menggunakan kelas tidak dapat mengetahui apakah ia mengakses data seperti yang disimpan atau mendapatkan / menetapkan nilai-nilai yang perlu dihitung, maka akan ada tingkat di mana bahasa juga tentu tidak pasti (dan karena itu dapat mensyaratkan bahwa semuanya memerlukan kode untuk perantara antara accessors / penyeleksi dan nilai-nilai). Tidak ada yang salah secara konsep dengan "structs with code" - mereka pasti bisa jauh lebih efisien - tetapi mereka membocorkan implementasi di semua tempat, dan itulah salah satu hal yang seharusnya dihilangkan OOP.