> For the complete documentation index, see [llms.txt](https://docs.yavuzlar.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.yavuzlar.org/egitim/c-plus-plus/3.0-siniflar/3.1-oop.md).

# 3.1 OOP

**C++'da Nesne Yönelimli Programlama (OOP)**, nesneleri ve sınıfları kullanarak programların daha esnek, yapılandırılmış ve yönetilebilir olmasını sağlayan bir programlama paradigmasıdır. C++'ın OOP özellikleri, yazılımcıların daha karmaşık ve ölçeklenebilir uygulamalar geliştirmesine olanak tanır. C++'da OOP'nin dört temel prensibi vardır:

1. **Kapsülleme (Encapsulation)**: C++'da kapsülleme, verileri ve bu verilere yönelik işlevleri bir arada tutarak, nesnelerin iç yapısını dışarıdan gizlemeyi sağlar. Bu, veri güvenliğini artırır ve kodun daha düzenli olmasına yardımcı olur. Kapsülleme, genellikle "public", "private" ve "protected" erişim belirleyicileri ile uygulanır.

   ```cpp
   class BankaHesabi {
   private:
       double bakiye; // Kapsüllenmiş veri

   public:
       void paraYatir(double miktar) { // Public metot
           bakiye += miktar;
       }

       double bakiyeGoster() { // Public metot
           return bakiye;
       }
   };
   ```
2. **Soyutlama (Abstraction)**: C++'da soyutlama, karmaşık sistemlerin basitleştirilmesini ve sadece önemli özelliklerin görünür hale getirilmesini sağlar. Kullanıcı, bir nesnenin detaylarıyla değil, yalnızca işlevselliği ile etkileşimde bulunur. Soyutlama genellikle arayüzler ve soyut sınıflar ile gerçekleştirilir.

   ```cpp
   class Sekil { // Soyut sınıf
   public:
       virtual void ciz() = 0; // Saf sanal fonksiyon
   };

   class Daire : public Sekil {
   public:
       void ciz() override { // Override ile soyut fonksiyonun implementasyonu
           // Daire çizme kodu
       }
   };
   ```
3. **Miras (Inheritance)**: Miras, bir sınıfın (alt sınıf) başka bir sınıftan (üst sınıf) özelliklerini ve işlevselliğini miras almasını sağlar. Bu, kod tekrarını azaltır ve yeni sınıfların oluşturulmasını kolaylaştırır. C++'da miras, "public", "protected" veya "private" erişim belirleyicileri ile yapılabilir.

   ```cpp
   class Hayvan { // Üst sınıf
   public:
       void ye() {
           // Yeme işlemi
       }
   };

   class Kopek : public Hayvan { // Alt sınıf
   public:
       void havla() {
           // Havlama işlemi
       }
   };
   ```
4. **Polimorfizm (Polymorphism)**: Polimorfizm, aynı isimdeki fonksiyonların farklı nesneler üzerinde farklı şekillerde çalışabilmesini sağlar. Bu, genellikle sanal fonksiyonlar ve işaretçilerle gerçekleştirilir.

   ```cpp
   void sesCikar(Hayvan* hayvan) {
       hayvan->sesCikar(); // Polimorfik çağrı
   }
   ```

C++'da OOP, yazılım geliştirmede daha modüler ve esnek bir yaklaşım sağlar. Nesne yönelimli programlama ile, yazılımcılar daha kolay bakım yapılabilir ve genişletilebilir yazılımlar geliştirebilirler. C++'ın sunduğu OOP özellikleri sayesinde, karmaşık sistemlerin yönetimi ve geliştirilmesi daha etkili hale gelir.
