- Kapsülleme (Encapsulation), bir sınıfın verilerini ve bu veriler üzerinde işlem yapan metotları bir arada tutarak verilere erişimi kontrol etme prensibidir.
- Java'da kapsülleme genellikle private değişkenler ve bu değişkenlere kontrollü erişim sağlayan public metotlar (getter ve setter) ile uygulanır.
Bir Araba sınıfımız olsun. Arabanın hızına herkesin doğrudan müdahale etmesini istemiyoruz.
public class Araba {
private int hiz;
public int getHiz(){
return this.hiz;
}
public void setHiz(int hiz)
{
if(hiz>=0&&hiz<=300)
{
this.hiz=hiz;
}
}
}- private int hiz; — hiz değişkenine sınıf dışından doğrudan erişilmesini engeller.
- getHiz() — mevcut hızı okumayı sağlar.
- setHiz(int hiz) — hız değerini belirli koşullara göre değiştirmeyi sağlar.
- this.hiz — mevcut nesnenin hiz değişkenini ifade eder.
public class Main {
public static void main(String[] args) {
Araba araba = new Araba();
araba.setHiz(120);
System.out.println(araba.getHiz()); // 120
araba.setHiz(-50);
System.out.println(araba.getHiz()); // 120
}
}
Neden sonuç 120 olarak kalıyor? Çünkü setHiz() metodu negatif hız değerini kabul etmiyor. Böylece nesnenin verisi kontrollü biçimde korunuyor.
Kapsülleme kullanılmadan
public int hiz;Bu durumda sınıf dışından şu şekilde erişilebilir:
araba.hiz = -50;Negatif bir değer doğrudan atanabilir ve sınıfın belirlediği kurallar atlanabilir.
- Veri güvenliği: Değişkenlere doğrudan erişimi sınırlar.
- Kontrollü erişim: Verilerin hangi koşullarda değiştirileceğini belirler.
- Bakım kolaylığı: İç uygulamayı değiştirmeyi kolaylaştırır.
- Doğrulama: Geçersiz değerlerin atanmasını önlemeye yardımcı olur.
Önemli: Kapsülleme yalnızca getter ve setter yazmak değildir. Asıl amaç, nesnenin durumunu korumak ve erişimi gerektiği kadar sınırlandırmaktır. Her değişken için setter oluşturmak zorunlu değildir.