# 3.6 Kapsülleme (Encapsulation)

####

Kapsülleme, nesne yönelimli programlamanın temel prensiplerinden biridir. C++ dilinde, kapsülleme, bir sınıfın verilerini (değişkenlerini) ve bu verilere erişimi kontrol eden metotlarını bir arada gruplandırma yöntemidir. Kapsülleme, veri gizliliğini artırarak, nesne yönelimli programlamada güçlü ve güvenli bir yapı sağlar.

**Kapsüllemenin Temel Unsurları**

1. **Veri Gizliliği**: Kapsülleme sayesinde, bir nesnenin iç durumu (veri) dışarıdan doğrudan erişime kapatılır. Sınıf üyeleri genellikle private veya protected olarak tanımlanır. Böylece, verilerin yanlışlıkla değiştirilmesi veya erişilmesi engellenir.
2. **Erişim Metotları**: Sınıfın dışından veri erişimini sağlamak için public olarak tanımlanan metotlar kullanılır. Bu metotlar, verilere erişimi ve verilerin değiştirilmesini kontrol eder. Genellikle getter ve setter metotları olarak bilinir.
3. **Kapsülleme Örneği**: Aşağıdaki örnek, C++'da kapsülleme kullanımını göstermektedir.

**Örnek**

```cpp
#include <iostream>
#include <string>

class Hesap {
private:
    double bakiye; // Private veri üyeleri

public:
    // Yapıcı
    Hesap(double b) : bakiye(b) {}

    // Getter metodu
    double getBakiye() {
        return bakiye;
    }

    // Setter metodu
    void paraYatir(double miktar) {
        if (miktar > 0) {
            bakiye += miktar; // Bakiye artırma
            std::cout << "Para yatırıldı: " << miktar << std::endl;
        } else {
            std::cout << "Negatif miktar yatırılmaz!" << std::endl;
        }
    }

    void paraCek(double miktar) {
        if (miktar > 0 && miktar <= bakiye) {
            bakiye -= miktar; // Bakiye azaltma
            std::cout << "Para çekildi: " << miktar << std::endl;
        } else {
            std::cout << "Yetersiz bakiye!" << std::endl;
        }
    }
};

int main() {
    Hesap hesap(1000.0); // Yeni bir hesap oluşturma
    std::cout << "Mevcut Bakiye: " << hesap.getBakiye() << std::endl; // Bakiye kontrolü

    hesap.paraYatir(500); // Para yatırma
    std::cout << "Yeni Bakiye: " << hesap.getBakiye() << std::endl;

    hesap.paraCek(300); // Para çekme
    std::cout << "Yeni Bakiye: " << hesap.getBakiye() << std::endl;

    hesap.paraCek(1500); // Yetersiz bakiye durumu
    return 0;
}
```

**Çıktı**

```yaml
Mevcut Bakiye: 1000
Para yatırıldı: 500
Yeni Bakiye: 1500
Para çekildi: 300
Yeni Bakiye: 1200
Yetersiz bakiye!
```

#### Sonuç

Kapsülleme, C++ dilinde veri gizliliğini ve yönetimini sağlamak için önemli bir araçtır. Sınıf üyelerini private veya protected olarak tanımlayarak, dışarıdan erişimi sınırlamak ve erişim metotları (getter ve setter) aracılığıyla kontrol etmek, programların daha güvenli ve yönetilebilir olmasına katkı sağlar.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.yavuzlar.org/egitim/c-plus-plus/3.0-siniflar/3.6-kapsulleme-encapsulation.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
