İçeriğe geç

Encapsulation (Kapsülleme)

Encapsulation (Kapsülleme), nesneye ait verileri (değişkenleri) dış erişimden korumak ve sadece belirli yollarla erişilmesini sağlamak için kullanılır.
Bu yaklaşım, veri gizliliği (data hiding) prensibini uygular.


  • Verileri korumak (dışarıdan doğrudan değiştirmeyi engellemek)
  • Kodun güvenliğini ve kontrolünü artırmak
  • Nesneye ait alanlara sadece getter / setter metotlarıyla erişmek

  1. Sınıf değişkenleri private yapılır.
  2. Dışarıdan erişim için public getter ve setter metotları oluşturulur.

public class Ogrenci {
private String isim;
private int yas;
// Getter metotları
public String getIsim() {
return isim;
}
public int getYas() {
return yas;
}
// Setter metotları
public void setIsim(String isim) {
this.isim = isim;
}
public void setYas(int yas) {
if (yas > 0) {
this.yas = yas;
} else {
System.out.println("Yaş negatif olamaz!");
}
}
}
public class Main {
public static void main(String[] args) {
Ogrenci o = new Ogrenci();
o.setIsim("Mehmet");
o.setYas(20);
System.out.println(o.getIsim() + " - " + o.getYas());
}
}

💡 yas değişkeni dışarıdan doğrudan değiştirilemez. Sadece setYas() üzerinden kontrol edilerek atanabilir.


MetotAmacı
get...()Değer okumak için kullanılır
set...()Değer atamak için kullanılır
kisi.setAd("Ahmet");
System.out.println(kisi.getAd());

🔹 6. Veri Doğrulama (Validation) ile Kullanım

Section titled “🔹 6. Veri Doğrulama (Validation) ile Kullanım”
public class BankaHesabi {
private double bakiye;
public void setBakiye(double bakiye) {
if (bakiye >= 0) {
this.bakiye = bakiye;
} else {
System.out.println("Bakiye negatif olamaz!");
}
}
public double getBakiye() {
return bakiye;
}
}

✅ Kullanıcı hatalı değer girmeye çalışsa bile, sınıf kendi verisini korur.


🔹 7. Sadece Okunabilir / Yazılabilir Alanlar

Section titled “🔹 7. Sadece Okunabilir / Yazılabilir Alanlar”
private final String tcNo = "12345678900";
public String getTcNo() {
return tcNo;
}
private String sifre;
public void setSifre(String sifre) {
this.sifre = sifre;
}

🔹 8. Gerçek Hayat Örneği: Personel Sınıfı

Section titled “🔹 8. Gerçek Hayat Örneği: Personel Sınıfı”
public class Personel {
private String ad;
private double maas;
public void setAd(String ad) {
this.ad = ad;
}
public String getAd() {
return ad;
}
public void setMaas(double maas) {
if (maas >= 17000) {
this.maas = maas;
} else {
System.out.println("Asgari maaşın altında!");
}
}
public double getMaas() {
return maas;
}
}
Personel p = new Personel();
p.setAd("Zeynep");
p.setMaas(20000);
System.out.println(p.getAd() + " maaş: " + p.getMaas());

ÖzellikPublic DeğişkenEncapsulated (Private + Getter/Setter)
Erişim kontrolü❌ Yok✅ Var
Veri doğrulama❌ Yok✅ Yapılabilir
GüvenlikDüşükYüksek
EsneklikAzFazla

🧠 10. İleri Seviye: Lombok ile Getter/Setter Otomasyonu

Section titled “🧠 10. İleri Seviye: Lombok ile Getter/Setter Otomasyonu”

Java projelerinde Lombok kütüphanesi kullanılarak getter ve setter metotları otomatik üretilebilir.

import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class Ogrenci {
private String isim;
private int yas;
}

💡 Lombok, kod tekrarını azaltır; ancak projeye harici kütüphane eklenmesi gerekir.


KavramAçıklama
EncapsulationVerilerin gizlenmesi ve kontrollü erişim
privateDeğişkenleri dış erişime kapatır
get/setGüvenli veri erişimi sağlar
ValidationYanlış veri girişini engeller
AvantajGüvenlik, modülerlik, kontrol

💡 Not: Encapsulation, OOP’nin (Nesne Yönelimli Programlama) temel ilkelerinden biridir ve data hiding prensibini uygular.