4.1 Nesne Yönelimli Programlama Felsefesi

Nesne Yönelimli Programlama (Object-Oriented Programming - OOP), yazılımı birbirleriyle etkileşime giren Nesneler (Objects) kümesi olarak modeller. C++'da bir Sınıf (Class), kullanıcı tanımlı bir veri tipidir ve veriyi (State) bu veri üzerinde çalışan fonksiyonlarla (Behavior) birleştirir.

Veri Gizleme (Encapsulation)

İçsel verilerin (Private members) dış dünyadan saklanması ve kontrollü bir arayüz (Public interface) üzerinden sunulmasıdır. Bu, sistemin modülerliğini ve güvenliğini artırır.

Soyutlama (Abstraction)

Karmaşık detayları gizleyip sadece gerekli olan özellikleri kullanıcıya sunmaktır. C++'da bu genellikle Soyut Sınıflar (Abstract Classes) üzerinden gerçekleştirilir.

4.2 Sınıf Yapısı ve Erişim Belirleyiciler

Erişim Belirleyiciler (Access Specifiers) sınıfın hiyerarşik sınırlarını çizer.

classDiagram class Motor { -int hp (Private) #int serial_no (Protected) +void calistir() (Public) +void durdur() (Public) } note for Motor "Private: Sadece bu sınıf\nProtected: Miras alanlar\nPublic: Herkes"

Şema 4.1: C++ Sınıf Diyagramı ve Görünürlük (Visibility) Seviyeleri

4.3 Modern C++: Deducing this ve Kurucular

modern_oop_architecture.cpp
#include <iostream>
#include <string>

/**
 * @brief Akademik Sınıf Tasarımı
 * MISRA C++:2023 Rule: Tek parametreli kurucular (Constructors) 'explicit' olmalıdır.
 */
class VeriIslemci {
private:
    std::string m_isim;

public:
    // Explicit Constructor: Örtülü dönüşümleri (Implicit conversions) engeller.
    explicit VeriIslemci(std::string isim) : m_isim(std::move(isim)) {
        std::cout << m_isim << " olusturuldu.\n";
    }

    // C++23: Deducing this (Açık nesne parametresi)
    // Bu özellik, 'this' işaretçisini açıkça parametre olarak almamızı sağlar.
    template 
    void rapor_ver(this Self&& self) {
        std::cout << "Rapor Hazirlaniyor: " << self.m_isim << std::endl;
    }

    // Yıkıcı (Destructor)
    ~VeriIslemci() {
        std::cout << m_isim << " yok edildi.\n";
    }
};

int main() {
    VeriIslemci islemci("Akademik_Modul_4");
    islemci.rapor_ver(); // 'this' otomatik olarak çözümlenir (deduced).
    
    return 0;
}

Mimarın Analizi:

Açık Nesne Parametresi (Explicit Object Parameter - Deducing this), C++23 ile gelen devrimsel bir özelliktir. Üye fonksiyonların (Member functions) şablon yapısında hem `const` hem de `non-const` versiyonlarını tek bir fonksiyonla yazmamıza olanak tanır. Bu, kod tekrarını (Code Duplication) azaltan akademik bir verimlilik sağlar.

RAII ve Yaşam Süresi (Lifetime):

C++'da bir nesne oluşturulduğunda Kurucu (Constructor), silindiğinde Yıkıcı (Destructor) çalışır. Bu mekanizma, bellek yönetiminin otomatize edilmesini sağlar.

⚠️ Sınıf Tasarım Hataları (Design Pitfalls)

Sığ Kopyalama (Shallow Copy): İşaretçi (Pointer) barındıran sınıflarda varsayılan kopyalama kurucusunun kullanılması. İki nesne aynı bellek adresini gösterir ve biri yok edildiğinde diğeri sarkan işaretçi (dangling pointer) haline gelir.
Nesne Dilimleme (Object Slicing): Türetilmiş bir sınıf nesnesinin, temel sınıf tipinde bir değişkene değer olarak (by value) atanması sonucu ek verilerin kaybolması.

4.5 Final Değerlendirme

Soru: Bir sınıfın kurucusunun önüne 'explicit' yazmak neyi sağlar?

Pratik Görev (Telegram Challenge):

"trcpp-telegram verilerinden bir soru: Bir 'Araba' sınıfı tasarlayın. Bu sınıfın şasi numarası 'Private' (Özel), model ismi 'Public' (Genel) olsun. Kurucu fonksiyonda model ismini 'std::move' ile alarak performans optimizasyonu yapın."