# Kapsülleme

Adres: https://softwaredictionary.org/tr/terimler/encapsulation
Kategori: Programlamanın Temelleri
Son güncelleme: 2026-09-30
İngilizcesi: Encapsulation
Türkçe karşılığı: sarmalama
Okunuşu: inkepsyuleyşın

Kısaca: Kapsülleme, verileri onları kullanan metotlarla paketleyip iç ayrıntıları gizlemektir; dışarıdaki kod yalnızca herkese açık bir arayüz üzerinden çalışır.

## Programlamada kapsülleme (encapsulation) nedir?

Kapsülleme, bir nesnenin verilerini ve bu veriler üzerinde çalışan kodu genellikle bir sınıf olan tek bir birimde bir arada tutmak ve iç ayrıntıları programın geri kalanından gizlemek demektir. Dışarıdaki kod, verileri doğrudan okuyup değiştirmek yerine küçük bir herkese açık metot kümesi üzerinden etkileşir. Kalıtım, çok biçimlilik ve soyutlamayla birlikte nesne yönelimli programlamanın temel ilkelerinden biridir.

Diller kapsüllemeyi, bir üyeyi kimin görebileceğini denetleyen anahtar sözcükler olan erişim belirleyicileriyle (access modifier) uygular. Java, C# ve TypeScript'te `private` üyeler yalnızca kendi sınıflarının içinde kullanılabilir, `public` üyeler ise dış arayüzü oluşturur; JavaScript özel alanları `#` önekiyle işaretler, Python ise bir adı alt çizgiyle başlatma geleneğine dayanır. Her değişiklik metotlardan geçtiği için sınıf girdiyi doğrulayabilir ve verisini tutarlı tutabilir; örneğin bir banka bakiyesinin eksiye düşmesine izin vermeyerek.

Araba iyi bir benzetmedir: direksiyon ve pedallarla sürersiniz ve yakıt enjektörlerine dokunmaz ya da bujilerin ateşleme zamanını kendiniz ayarlamazsınız. Bu iç parçalar gizli olduğu için üretici, nasıl sürdüğünüzü değiştirmeden motoru yeniden tasarlayabilir; tıpkı bir sınıfın iç kodunu, onu kullanan kodu bozmadan değiştirebilmesi gibi.

Kapsülleme sıklıkla soyutlamayla karıştırılır. Soyutlama, bir nesnenin hangi temel özellikleri sunacağına karar verip geri kalanını yok saymakla ilgilidir; kapsülleme ise verileri paketleyen ve geri kalan her şeyi gizleyen mekanizmadır. Her özel alan için herkese açık bir getter ve setter eklemek pek az gerçek kapsülleme sağlar, çünkü dışarıdaki kod yine de her şeyi değiştirebilir; iyi kapsülleme bunun yerine `deposit()` gibi anlamlı işlemleri sunar.

## Önemli noktalar

- Kapsülleme, verileri ve onlar üzerinde çalışan metotları tek bir birimde paketler.
- `private` ve `public` gibi erişim belirleyicileri, dışarıdaki kodun neyi görebileceğini denetler.
- Tüm değişiklikler, girdiyi doğrulayıp veriyi tutarlı tutabilen metotlardan geçer.
- İç ayrıntılar, herkese açık arayüzü kullanan kodu bozmadan değişebilir.
- Soyutlama neyin sunulacağına karar verir; kapsülleme geri kalanı gizler.

## Örnek: JavaScript'te özel alanlı bir sınıf

```javascript
class BankAccount {
  #balance = 0; // private: only code inside the class can touch it
  deposit(amount) {
    if (amount <= 0) throw new Error("Deposit must be positive");
    this.#balance += amount;
  }
  get balance() {
    return this.#balance; // read-only from the outside
  }
}

const account = new BankAccount();
account.deposit(50);
console.log(account.balance); // 50
// account.#balance = 1000000; // SyntaxError: private field
```

## Sık sorulan sorular

**Kapsülleme ile soyutlama arasındaki fark nedir?**

Soyutlama, bir e-posta istemcisindeki `send()` metodu gibi bir şeyin yalnızca temel özelliklerini sunmakla ilgilidir. Kapsülleme ise bunu kodda nasıl başaracağınızdır: verileri metotlarıyla paketlemek ve iç ayrıntıları erişim belirleyicilerinin arkasında gizlemek.

**Kapsülleme neden önemlidir?**

Verilerin geçersiz biçimlerde değiştirilmesini önler, ilişkili kodu tek bir yerde tutar ve bir sınıfın iç yapısını, onu kullanan kodu bozmadan değiştirmenize olanak tanır. Bu, büyük programları sürdürmeyi ve hata ayıklamayı kolaylaştırır.

**Python kapsüllemeyi destekler mi?**

Python'da zorunlu bir `private` anahtar sözcüğü yoktur. Gelenek olarak `_balance` örneğindeki gibi başta bir alt çizgi bir üyeyi dahili olarak işaretler ve çift alt çizgi ad bozma (name mangling) tetikler; bu, dışarıdan yanlışlıkla erişimi zorlaştırır ama imkânsız kılmaz.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
