Nesne Tabanlı Programlama 2

Dönem Sonu Özeti

Emre Can Yılmaz

Ondokuz Mayıs Üniversitesi

2025

Döneme Genel Bakış

  • OOP Nedir? Gerçek dünya modellemesi.
  • Neden OOP? Daha düzenli, anlaşılır, bakımı kolay ve yeniden kullanılabilir kod.
  • Bu dönemde OOP’nin temel ve ileri seviye kavramlarını, Python’daki uygulamalarını ve iyi yazılım tasarım prensiplerini ele aldık.

1 - OOP’ye Giriş ve Temel Kavramlar

  • Sınıf (Class): Nesneler için bir şablon/taslak.
  • Nesne (Object): Sınıftan türetilmiş, kendine özgü nitelik ve davranışları olan örnek.
  • __init__ (Yapıcı Metot): Nesne oluşturulurken ilk ayarları yapar.
  • self Parametresi: Metotlar içinde nesnenin kendisini temsil eder.
  • Nitelikler (Attributes): Nesnenin özellikleri/verileri.
  • Metotlar (Methods): Nesnenin yapabildiği eylemler/fonksiyonlar.
    • Örnek Metotları
    • Sınıf Metotları (@classmethod, cls)
    • Statik Metotlar (@staticmethod)

2 - OOP’nin Temel Prensipleri - I

  • Kapsülleme (Encapsulation)
    • Veri ve metotları bir arada tutma, veri gizleme.
    • Kontrollü erişim: _ (korumalı), __ (özel).
    • Getter/Setter metotları, @property dekoratörü.
    • Amaç: Veri güvenliği, modülerlik.
  • Soyutlama (Abstraction)
    • Karmaşıklığı gizleme, sadece gerekli detayları sunma.
    • abc modülü: Soyut Sınıflar (Abstract Classes) ve Soyut Metotlar (@abstractmethod) ile kontrat tanımlama.

3 - OOP’nin Temel Prensipleri - II

  • Kalıtım (Inheritance)
    • “Bir türüdür” (is-a) ilişkisi, kod tekrarını azaltma.
    • Üst Sınıf (Superclass/Base), Alt Sınıf (Subclass/Derived).
    • super() fonksiyonu: Üst sınıf metotlarına erişim.
    • Metot Ezme (Method Overriding).
    • Çoklu Kalıtım ve MRO (Method Resolution Order).
  • Çok Biçimlilik (Polymorphism)
    • “Birçok form”: Aynı arayüz, farklı davranışlar.
    • Duck Typing: “Ördek gibi yürüyorsa ördektir.” Davranış önemlidir, tip değil.
    • Kompozisyon: “Sahiptir” (has-a) ilişkisi. Kalıtıma güçlü bir alternatif.

4 - Python’ın İleri Seviye Özellikleri - I

  • Özel (Magic) Metotlar
    • Çift alt çizgi (__metot__).
    • Nesnelerin Python’ın yerleşik davranışlarıyla entegrasyonu.
    • Örnekler: __str__, __repr__, __len__.
    • Operatör Aşırı Yükleme: __add__, __eq__ vb. ile operatörlere özel anlamlar katma.
  • Dekoratörler (@)
    • Fonksiyon/sınıf davranışlarını, kodlarını değiştirmeden ek yetenekler katma.

5 - Python’ın İleri Seviye Özellikleri - II

  • Iterator Protokolü
    • for döngüsünün arkasındaki sihir: __iter__ ve __next__.
    • Adım adım veri erişimi.
  • Üreteçler (Generators)
    • yield anahtar kelimesi ile bellek dostu iteratorlar.
    • Değerleri “istendiğinde” üretir, büyük veri setleri için ideal.
    • Dikkat: Üreteçler tek kullanımlıktır!
    • Üreteç İfadeleri: (ifade for eleman in koleksiyon) ile tek satırda üreteç.
  • Tip İpuçları (Type Hints)
    • Kodun okunabilirliğini ve bakımını artırır.
    • mypy gibi araçlarla statik analiz imkanı.
    • typing modülü (örn: List[int], Optional[str]).

6 - Yazılım Tasarım İlkeleri: SOLID

  • Single Responsibility Principle (Tek Sorumluluk)

  • Open/Closed Principle (Açık/Kapalı)

  • Liskov Substitution Principle (Liskov Yerine Geçme)

  • Interface Segregation Principle (Arayüz Ayrımı)

  • Dependency Inversion Principle (Bağımlılık Tersine Çevirme)

    Amaç: Daha anlaşılır, yönetilebilir ve değişime adapte olabilir kodlar yazmak.

7 - Tasarım Desenleri (Design Patterns)

  • Nedir? Sık karşılaşılan yazılım problemlerine denenmiş, hazır çözüm yolları.
  • Kategoriler: Yaratımsal, Yapısal, Davranışsal.
  • Örnekler:
    • Singleton: Bir sınıftan tek nesne.
    • Factory Method: Nesne yaratma işini alt sınıflara devretme.
    • Decorator: Nesnelere dinamik olarak yeni sorumluluklar ekleme.
    • Observer: Bir nesnedeki değişiklikleri diğerlerine bildirme.
    • Strategy: Algoritmaları değiştirilebilir yapma.

8 - Kod Kalitesi: Test ve Hata Ayıklama

  • Birim Test (Unit Testing)
    • Kodun küçük, bağımsız parçalarını test etme.
    • unittest, pytest kütüphaneleri.
    • Assertion’lar: Beklentileri kontrol etme.
    • Mocking: Dış bağımlılıkları taklit etme.
  • Test Güdümlü Geliştirme (TDD)
    • Red -> Green -> Refactor döngüsü.
    • Önce test yaz, sonra kodu yaz.
  • Hata Ayıklama (Debugging)
    • print() ile basit takip.
    • IDE Debugger’ları (Breakpoint, Step Over/Into).
    • pdb (Python Debugger).

9 - Eş Zamanlılık, Paralellik ve Asenkron Programlama

  • Eş Zamanlılık (Concurrency): İşlerin “sanki” aynı anda yapılması (threading).
  • Paralellik (Parallelism): İşlerin “gerçekten” aynı anda yapılması (çok çekirdekli CPU, multiprocessing).
  • Asenkron Programlama: “Beklemeden” ilerleme (asyncio, async/await). Amaç: Performans artışı

Özet ve Sonuç

  • Bu dönemde OOP’nin temel direklerini, Python’daki güçlü araçlarını ve iyi yazılım geliştirme pratiklerini öğrendik.
  • Sınıflar, Nesneler, 4 Temel Prensip (Kapsülleme, Soyutlama, Kalıtım, Çok Biçimlilik) vazgeçilmezlerimiz oldu.
  • Magic Metotlar, Dekoratörler, Üreteçler, Tip İpuçları Python’da daha etkili kod yazmamızı sağladı.
  • SOLID prensipleri ve Tasarım Desenleri daha kaliteli yazılımlar için yol göstericimiz.
  • Test yazmak ve hata ayıklamak profesyonel geliştirmenin ayrılmaz bir parçası.

Teşekkürler!

  • Dönem boyunca gösterdiğiniz ilgi ve katılım için teşekkür ederim.
  • Başarılar dilerim!