Public Getter ve setter metodları olan private bir değişken (karizmatik adı field) ile bu motodları olmayan public değişken arasında ne fark var? Yani neden
nesne.setDeger(42);
diyoruz da
nesne.Deger = 42;
demiyoruz?

setDeger metotu içinde değişkeni kontrol edebiliriz ve bize o değer uymuyorsa atamayı yaptırmayız mesela. örneğin bu değer yaşsa 0'ın altında değer girilmesini istemeyiz. setDeger metotu olmazsa dışarıdan 0'ın altında değer girilebilir. fakat biz bunu metot içinde bir if ile kontrol ederek değer atamasını yaptırmayıp yeniden değer girilmesini falan isteyebiliriz.


peki şimdilik ona benzer hiçbir kısıtımız olmadığını varsayalım, her değer atanabiliyor ve alınabiliyor. O zaman neye hizmet ediyor bu iş, ileride değiştirmem icap ederse sadece orayı değiştirmemin yetmesini mi sağlıyor yoksa başka avantajları da var mı? bellek yönetimi ile ilgili falan?


Veri girişi ve değişikliğin tek bir yerden yapılmasına izin veriyor, dolayısıyla daha güvenli oluyor.


why encapsulation diyerek arattığın zaman karşına birçok örnek çıkıyor bununla ilgili, genel olarak özet geçmek gerekirse, veriyi tek bir noktadan set edebildiğin için verinin etkileyebileceği diğer değişkenlere uygun olarak işlem yapabiliyorsun. böylece veri değişimlerinde programın bozulmasını engellemiş oluyorsun.
belki bu normal bir program kodlarken senin işine yaramayabilir, sen diyorsun ki ben kendi fonksiyonlarım arasında her değer değişimlerini bozulmayacak şekilde yaptığımdan ve son kullanıcının da bu değerlerle işi olmayacağından neden kullanayım bunu? kendince haklısın, fakat biraz daha geniş çaplı özellikle ortak projelerde filan bu özellik önemli hale geliyor.
onun dışında eğer bir program değil de programcıların kullanacağı bir kütüphane, component vs. yazıyorsan da bu değerlere kullanıcının doğrudan erişmesini engellemen gerekebiliyor.
gmoeck.github.com
