English
QT Framework (C++)

Üniversitede Qt ve C++ ile Yazdığım Stok Takip Programı

Profesyonel bir proje değil ama OOP'yi gerçekten orada öğrendim.

· Full Stack Developer · Güncellendi:

Üniversitede yazdığım ilk ciddi masaüstü uygulama bir stok takip programıydı, Qt ve C++ ile. Qt, C++ üzerine kurulu, arayüz ve arka plan mantığını aynı kod tabanında yazmayı sağlayan bir framework. Signal-slot mekanizmasıyla arayüz elemanlarını, buton, liste, form, kod tarafındaki mantığa bağlıyorsun; bir butona tıklandığında hangi fonksiyonun çalışacağını bu şekilde tanımlıyorsun.

Bu projeyi Karadeniz Teknik Üniversitesi'nde, İstatistik ve Bilgisayar Bilimleri bölümünde okurken (2020-2024) Nesne Yönelimli Programlama dersi kapsamında yazdım. Modüler bir masaüstü stok takip uygulamasıydı: sınıfları sorumluluklarına göre ayırıp kalıtım, encapsulation ve polimorfizm gibi OOP prensiplerini teoriden çıkarıp gerçek bir kod tabanında denemiş oldum.

Bunu profesyonel bir iş deneyimi gibi sunmuyorum, tamamen akademik bir proje. Ama bir sınıf hiyerarşisinin nerede dağıldığını, hangi sorumluluğun ayrı bir sınıfa çıkması gerektiğini ilk kez orada, kendi hatalarımla görerek öğrendim. Yıllar sonra Clean Architecture ile katmanları ayırırken kullandığım refleks, aslında o derste şekillenmeye başlamıştı.

Qt'nin signal-slot mekanizması aslında standart C++'ın üstüne kurulu bir ek katman; C++'ın kendisinde reflection olmadığı için Qt, moc (Meta-Object Compiler) denen bir ön derleyiciyle sınıflarını tarayıp bu bağlantıları çalışma zamanında kurulabilir hale getiriyor. Bir de QObject'lerin parent-child ilişkisi üzerinden kurulan bir sahiplik modeli var: bir widget'ı başka bir widget'ın altına eklediğinde, üst nesne silindiğinde alt nesneleri de otomatik temizliyor, yani her pointer'ı elle delete etmek zorunda kalmıyorsun.

Bunu abartmamak lazım; tek dönemlik bir ders projesinde thread güvenliği, bellek sızıntısı ya da büyük ölçekli bir masaüstü uygulamasının performans sorunları gibi konularla gerçek anlamda karşılaşmadım, Qt'nin sahiplik modeli zaten çoğu basit senaryoda bu sorunları örtüyor. Ayrıca bu tamamen masaüstü/C++ tarafında kalan bir tecrübe; bugün günlük işimde yazdığım web tabanlı CRUD akışlarıyla doğrudan aynı paradigma değil, o yüzden bunu 'C++ ile production deneyimim var' gibi sunmuyorum.