Nesne Tabanlı Programlama 2

1 - OOP’ye Giriş ve Temel Kavramlar

Emre Can Yılmaz

Ondokuz Mayıs Üniversitesi

2025

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

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.

İletişim

Dönem süresince aşağıdaki gibi sorulara cevap verilmeyecektir:

  • 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?

Konular

  • Giriş ve Temel Kavramlar
  • Sınıflar, Nesneler, Yapıcı Metotlar
  • Fonksiyonlar, Modüller
  • Kalıtım
  • Çok Biçimlilik
  • Kapsülleme, Soyutlama
  • Özel Metotlar
  • Tasarım Desenleri
  • İleri Düzey Sınıf Kavramları
  • Unit Testing
  • Modüller ve Paketler
  • Concurrency, Paralellik, Asenkron

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.
  • Amaç: Kodu daha düzenli, yeniden kullanılabilir, anlaşılır ve bakımı kolay hale getirmek.

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.

OOP’nin Tarihçesi

  • OOP’nin kökleri 1960’lardaki Simula programlama diline dayanır.
  • Smalltalk (1970’ler) dili, OOP’nin popülerleşmesinde önemli bir rol oynamıştır.
  • 1980’lerde C++ ve Objective-C gibi dillerin ortaya çıkışıyla OOP yaygınlaşmıştır.
  • 1990’larda Java, Python, Ruby gibi diller OOP’yi daha da erişilebilir hale getirmiştir.
  • Günümüzde, OOP birçok modern programlama dilinde (Python, Java, C#, C++, JavaScript, vb.) temel bir yaklaşımdır.

OOP ve Yazılım Geliştirme

OOP, yazılım geliştirme sürecinin birçok aşamasında kullanılır:

  • Analiz ve Tasarım: Gereksinimleri belirleme, sistemi modelleme, sınıf ve nesneleri tasarlama.
  • Kodlama: Sınıfları ve nesneleri kullanarak programı yazma.
  • Test: Kodun doğruluğunu ve güvenilirliğini test etme.
  • Bakım ve Genişletme: Programı güncelleme, yeni özellikler ekleme ve hataları düzeltme.

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ç…

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.

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}")

Ö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.