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.
Şema 4.1: C++ Sınıf Diyagramı ve Görünürlük (Visibility) Seviyeleri
4.3 Modern C++: Deducing this ve Kurucular
#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)
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."