Java, nesne yönelimli programlamayı temel alan bir dildir. Bu yaklaşımın temel yapı taşlarından biri de Encapsulation (Kapsülleme)’dir. Kapsülleme sayesinde bir sınıfın iç yapısı dış müdahalelere karşı korunur, sadece belirlenen yollarla erişim sağlanır.
Bu yazıda encapsulation nedir, neden önemlidir, nasıl uygulanır ve Java’daki pratik örnekleriyle ne işe yarar detaylı olarak öğreneceksin.
✅ Encapsulation (Kapsülleme) Nedir?
Encapsulation, bir nesnenin verilerini (özelliklerini) ve bu verilerle ilgili işlemleri (metotları) tek bir yapı (sınıf) içinde toplama ve dış dünyadan doğrudan erişimi kısıtlama işlemidir.
🔐 Amaç:
- Veri gizliliğini sağlamak
- Nesneleri dışarıdan gelebilecek yanlış kullanıma karşı korumak
- Yazılımın bakımını ve güvenliğini kolaylaştırmak
🧱 Java’da Kapsülleme Nasıl Yapılır?
1. Alanlar (field) private
olarak tanımlanır.
2. Erişim için getter
ve setter
metotları kullanılır.
📦 Örnek: Kapsüllenmiş Öğrenci Sınıfı
public class Ogrenci {
private String isim;
private int yas;
// Getter (okuma metodu)
public String getIsim() {
return isim;
}
// Setter (değiştirme metodu)
public void setIsim(String isim) {
this.isim = isim;
}
public int getYas() {
return yas;
}
public void setYas(int yas) {
if (yas > 0) {
this.yas = yas;
} else {
System.out.println("Yaş pozitif olmalıdır.");
}
}
}
Kullanımı:
public class Main {
public static void main(String[] args) {
Ogrenci o1 = new Ogrenci();
o1.setIsim("Furkan");
o1.setYas(21);
System.out.println("İsim: " + o1.getIsim());
System.out.println("Yaş: " + o1.getYas());
}
}
⚠️ Neden private
ve getter/setter
Kullanılır?
Eğer değişkenler doğrudan public
olursa, dışarıdan hatalı veri atanabilir. private
yaparak dışarıdan doğrudan erişimi engeller, sadece senin tanımladığın kurallarla veri girişine izin verirsin.
Örneğin:
o1.setYas(-5); // setter metodu sayesinde bu işlem engellenir
Bu durum yazılımda veri bütünlüğünü sağlar.
Avantajları
Avantaj | Açıklama |
---|---|
Veri Güvenliği | Hatalı veri girişini engeller |
Kodun Kontrolü | Değişkenlere ulaşımı kontrol altına alır |
Bakımı Kolaylaştırır | Değişiklik yapıldığında tek bir noktadan yönetilir |
Esneklik Sağlar | Farklı iş mantıkları getter/setter içine yerleştirilebilir |
Gelişmiş Kullanım: Sadece Getter – Read-Only Alan
public class Kitap {
private final String isbn = "123-456-789";
public String getIsbn() {
return isbn;
}
}
Bu kullanımda değer sadece okunabilir, dışarıdan değiştirilemez.
Setter Olmadan – Write-Only Alan
public class SifreliKullanici {
private String sifre;
public void setSifre(String sifre) {
this.sifre = sifre;
}
}
Bu durumda değer yalnızca yazılabilir ama okunamaz. Örneğin şifre bilgisi dışarıya gösterilmez.