Nesne Tabanlı Programlama 2

1 - OOP’ye Giriş ve Temel Kavramlar

Emre Can Yılmaz

Ondokuz Mayıs Üniversitesi

2026

Dersin Tanıtımı

  • BLP 209 - Nesne Tabanlı Programlama 2
  • Dersin Amacı: Nesne Yönelimli Programlama (OOP) prensiplerini öğretmek ve Python’da OOP kullanarak yazılım geliştirmeyi sağlamak.
  • Değerlendirme:
    • Örgün: Vize (%40) + Final (%60)
    • Uzaktan Eğitim: Vize (%20) + Final (%80)

Kaynaklar

  • Paylaşılacak Slayt ve Belgeler https://emrecan.dev
  • Python - Mustafa Başer (Dikeyeksen)
  • Head First Python: A Brain-Friendly Guide
  • Python Cookbook: Recipes for Mastering Python 3

Geliştirme Ortamı ve Kurulum

  • Python sürümü: Bu derste Python 3.10+ temel alınacaktır. (3.11/3.12 kullanmanız da uygundur.)
  • Editör/IDE: Önerim VS Code + Python eklentisi (alternatif: PyCharm).
  • Çalıştırma şekli: Örnekleri çoğunlukla .py dosyalarıyla ve terminal üzerinden çalıştıracağız.
  • Kütüphane yönetimi: Zamanla venv (sanal ortam) kullanacağız; ilk haftalarda minimum kurulumla ilerleyeceğiz.

Dersin İşleyişi

  • Her hafta genel akış: kısa tekrar → canlı kod okuma/yazma → mini alıştırma → özet
  • Derste temel hedef: “izleyip geçmek” değil, birlikte kodlamak ve tartışmak
  • Materyaller: Slaytlar ve ek okumalar ders haftası içinde paylaşılır.
  • Soru/geri bildirim: Konuya yönelik, somut ve kısa sorularla ilerlemek tercih edilir (hata mesajı, ilgili kod parçası, beklenen/elde edilen çıktı).

Beklentiler

  • Derse düzenli katılım ve aktif olarak dinleme.
  • Verilen okumaları ve alıştırmaları zamanında yapma.
  • Soru sormaktan ve tartışmalara katılmaktan çekinmeme.
  • Kendi başınıza kod yazma pratiği yapma.
  • Yardım istemekten ve işbirliği yapmaktan çekinmeme.

Değerlendirme ve Sınav Formatı

  • Bu dersin ölçme-değerlendirmesi ağırlıklı olarak temel kavramları bilme ve kodu anlayıp açıklayabilme becerileri üzerine kuruludur.
  • Sınavlarda tipik olarak şu tür sorular yer alabilir:
    • Çoktan seçmeli kavram soruları
    • Kod okuma / çıktı tahmini
    • Hata bulma ve düzeltme
    • Küçük sınıf tasarımı ve sorumluluk dağıtımı
  • Mazeret/telafi/itiraz gibi idari süreçler ilgili mevzuat ve resmî prosedürler çerçevesinde yürütülür.

İdari Talepler ve Resmî Süreçler

Aşağıdaki türden talepler bireysel inisiyatifle çözülemez; ilgili birim ve resmî süreçler üzerinden yürütülür. Bu nedenle dönem boyunca bu kapsamda e-posta ile değerlendirme yapılmayacaktır:

  • Vize/Final/Bütünleme sınavına giremeyeceğim, telafi sınavı yapar mısınız?
  • Uzakta oturuyorum, bütünlemeye giremeyeceğim, ödev/proje verebilir misiniz?
  • Hastalık/mazeret nedeniyle sınava giremedim, ek sınav hakkı tanır mısınız?
  • Otobüsü kaçırdım, sınava geç kaldım, tekrar sınava girebilir miyim?
  • Bu dersi geçersem tek ders sınavına gireceğim, notumu yükseltir misiniz?

Ne yapmalıyım? - İlgili duyuruları takip edin; resmî başvuru/mazeret süreçleri için öğrenci işleri / ilgili idari birim ile ilerleyin.

Konular

  • Giriş ve Temel Kavramlar
  • Sınıflar, Nesneler, Yapıcı Metotlar
  • Kalıtım
  • Çok Biçimlilik
  • Kapsülleme, Soyutlama
  • Özel Metotlar ve İleri Düzey Sınıf Kavramları
  • Modüller, Paketler ve Proje Yapısı
  • Tasarım Desenleri
  • Unit Testing
  • Concurrency, Paralellik, Asenkron
    • threading / multiprocessing / asyncio düzeyinde temel örnekler

OOP Nedir?

  • OOP (Object-Oriented Programming - Nesne Yönelimli Programlama), yazılım geliştirmede kullanılan bir programlama paradigmasıdır.
  • Gerçek dünyadaki nesneleri modellemeye dayanır.
  • Nesneler (objects), veri (özellikler - attributes) ve bu veriler üzerinde işlem yapan fonksiyonları (metotlar - methods) bir araya getirir.
  • OOP’nin pratikteki hedefi: sorumlulukları doğru yerlere dağıtmak, soyutlama sınırlarını netleştirmek ve değişiklik etkisini lokalize ederek bakımı kolaylaştırmaktır.

Neden OOP?

  • Daha İyi Organizasyon: Büyük projeleri daha küçük, yönetilebilir parçalara (nesnelere) ayırır.
  • Kod Tekrarını Azaltır: Ortak özellikleri ve davranışları olan nesneler için bir sınıf (class) tanımlayıp, bu sınıftan nesneler türetiriz.
  • Gerçek Dünyayı Modelleme: Nesneler, gerçek hayattaki varlıkları temsil ettiği için, kodu anlamak ve geliştirmek kolaylaşır.
  • Esneklik ve Genişletilebilirlik: Yeni özellikler eklemek veya mevcut özellikleri değiştirmek daha kolaydır.
  • Test edilebilirlik ve sürdürülebilirlik: İyi tasarlanmış sınıflar, birim testleri ve bakım süreçlerini belirgin biçimde kolaylaştırır.

Temel OOP Kavramları

  • Nesne (Object): Veri (özellikler - attributes) ve bu veriler üzerinde işlem yapan fonksiyonları (metotlar - methods) içeren bir varlık.
  • Sınıf (Class): Nesnelerin şablonu veya taslağı. Bir sınıf, nesnelerin hangi özelliklere ve metotlara sahip olacağını tanımlar.
  • Örnek (Instance): Bir sınıftan oluşturulmuş belirli bir nesne.

Örnek:

  • Sınıf: Araba
  • Nesneler: Kırmızı bir Ford Mustang, Mavi bir BMW X5, …
  • Özellikler: Marka, model, renk, motor hacmi, …
  • Metotlar: Hızlan, fren yap, dur, farları aç…

Sınıf ve Nesne Ayrımı (Metafor)

  • Sınıf (Class): Bir “mimari plan / proje çizimi” gibi düşünülebilir. Ne olacağını tarif eder, ama tek başına “somut” değildir.
  • Nesne (Object / Instance): O plana göre inşa edilmiş somut evler gibidir. Aynı plandan birçok ev yapılabilir; her biri farklı ayrıntılara sahip olabilir.
  • Bu metafor, “tek bir sınıftan çok sayıda nesne üretme” fikrini sezgisel hale getirir.

OOP’nin Temel Prensipleri

  1. Soyutlama (Abstraction): Karmaşıklığı gizleyerek, bir nesnenin yalnızca gerekli özelliklerini ve davranışlarını ortaya çıkarma.
  2. Kapsülleme (Encapsulation): Veri ve metotları bir nesne içinde bir araya getirerek, dış dünyadan izinsiz erişimi engelleme.
  3. Kalıtım (Inheritance): Bir sınıfın, başka bir sınıftan özelliklerini ve davranışlarını miras alması. Kod tekrarını azaltır.
  4. Çok Biçimlilik (Polymorphism): Aynı isimdeki bir metodun, farklı sınıflarda farklı şekillerde çalışabilmesi.

Neden Python ile OOP?

  • Okunabilirlik: Sözdizimi daha sade olduğu için “dil detayı”ndan çok tasarım ve mantığa odaklanmayı kolaylaştırır.
  • Hızlı prototipleme: Dinamik yapı sayesinde fikirleri hızlı deneyip doğrulayabilirsiniz.
  • Ekosistem: Veri bilimi, yapay zekâ ve backend tarafında yaygın kütüphanelerin önemli bölümü OOP temellerini kullanır.
  • Pratik üretkenlik: OOP prensiplerini gerçekçi örneklerle kısa sürede uygulamaya çevirmek mümkündür.

Python’da “Her Şey Bir Nesnedir”

  • Python’da yalnızca kendi yazdığımız sınıflar değil; int, str, list ve hatta fonksiyonlar bile birer nesnedir.
  • Bu, OOP’nin Python’da “ekstra bir özellik” değil, dilin çekirdeğine yakın bir yaklaşım olduğunu gösterir.
print(type(5))
print(type("merhaba"))
print(type([1, 2, 3]))

def f():
    pass

print(type(f))

Kodlama Standardı

  • Bu derste Python ekosistemine uyumlu biçimde temel isimlendirme standardını takip edeceğiz:

    • Sınıflar: PascalCase
    • Metotlar / fonksiyonlar: snake_case
  • Amaç: Okunabilirliği artırmak ve ekip/proje içinde ortak bir dil yakalamak.

Basit Sınıf Örnekleri

Araba Sınıfı:

class Araba:
    def __init__(self, marka, model, renk):
        self.marka = marka
        self.model = model
        self.renk = renk

    def bilgileri_goster(self):
        print(f"Marka: {self.marka}, Model: {self.model}, Renk: {self.renk}")

    def calistir(self):
        print("Araba çalıştırılıyor")

Nesne oluşturma

araba1 = Araba("Ford", "Mustang", "Kırmızı")
araba2 = Araba("Toyota", "Corolla", "Beyaz")

# Nesnelerin özelliklerine erişme ve metotlarını çağırma
print(araba1.marka)
print(araba2.model)
araba1.bilgileri_goster()  # Çıktı: Marka: Ford, Model: Mustang, Renk: Kırmızı
araba2.calistir()          # Çıktı: Araba çalıştırılıyor

Öğrenci Sınıfı

class Ogrenci:
    def __init__(self, ad, soyad, numara):
        self.ad = ad
        self.soyad = soyad
        self.numara = numara

    def bilgileri_goster(self):
        print(f"Ad: {self.ad}, Soyad: {self.soyad}, Numara: {self.numara}")

ogrenci1 = Ogrenci("Ahmet", "Yılmaz", 123)
ogrenci1.bilgileri_goster()  # Çıktı: Ad: Ahmet, Soyad: Yılmaz, Numara: 123

__init__ Metodu

  • Yapıcı metot (constructor) olarak da bilinir.
  • Bir sınıftan yeni bir nesne oluşturulduğunda otomatik olarak çağrılır.
  • Nesnenin ilk özelliklerini (attributes) ayarlamak için kullanılır.
class Araba:
    def __init__(self, marka, model, renk):  # __init__ metodu
        self.marka = marka  # Nesnenin marka özelliğini ayarla
        self.model = model  # Nesnenin model özelliğini ayarla
        self.renk = renk    # Nesnenin renk özelliğini ayarla

self Parametresi

  • self, bir sınıfın içinde tanımlanan metotların ilk parametresidir.
  • self, o anda üzerinde işlem yapılan nesneyi temsil eder.
  • Metotlar, nesnenin özelliklerine ve diğer metotlarına self aracılığıyla erişebilir.
class Araba:
    # ...
    def bilgileri_goster(self):
        print(f"Marka: {self.marka}, Model: {self.model}, Renk: {self.renk}")

Akademik Dürüstlük ve Yapay Zekâ Kullanımı

  • Yapay zekâ araçları (ör. kod üretme, hata açıklama, örnek çeşitlendirme) öğrenme amacıyla kullanılabilir ve teşvik edilir.
  • Ancak ölçme-değerlendirme bağlamında hedef, yalnızca “çalışan kod” değil; temel kavramları bilme, kodu açıklayabilme, gerekçelendirebilme ve çıktıyı yorumlayabilme becerisidir.

Özet

  • OOP, yazılım geliştirmede önemli bir paradigmadır.
  • Sınıflar ve nesneler, OOP’nin temel yapı taşlarıdır.
  • __init__ metodu, nesne oluşturulduğunda otomatik olarak çağrılır.
  • self parametresi, nesnenin kendisine referans verir.

Gelecek Hafta

  • Sınıflar ve nesnelerle çalışmaya devam edeceğiz.
  • Sınıf ve örnek niteliklerini, metotları ve örnek/sınıf değişkenlerini daha detaylı inceleyeceğiz.