Nesne Tabanlı Programlama 2

2 - Sınıflar, Nesneler ve Yapıcı Metotlar

Emre Can Yılmaz

Ondokuz Mayıs Üniversitesi

2025

Sınıflar ve Nesneler: Temel Kavramlar

  • Sınıf (Class): Nesnelerin planı veya şablonu. Nesnelerin hangi özelliklere (attributes) ve davranışlara (methods) sahip olacağını tanımlar.
  • Nesne (Object): Bir sınıfın örneği (instance). Kendine özgü özellikleri ve davranışları olan bir varlık.
  • Örnek (Instance): Bir sınıftan oluşturulmuş, o sınıfa ait belirli bir nesne.

Analoji:

  • Sınıf: Kurabiye kalıbı
  • Nesne/Örnek: Kurabiye kalıbından yapılmış kurabiyeler

Nitelik ve Metot

  • OOP’ta, bir nesnenin özelliklerine “nitelik” (attribute), işlevlerine ise “metot” (method) adı verilir.
  • Nitelikler, nesnenin özelliklerini temsil eden değişkenlerdir.
  • Metotlar, nesnenin yaptığı işlevleri temsil eden fonksiyonlardır.

Sınıf Tanımlama: class Anahtar Kelimesi

class Kopek:
    # Sınıfın özellikleri ve metotları buraya gelecek
    pass  # Şimdilik boş bırakıyoruz
  • class anahtar kelimesi ile sınıf tanımlanır.
  • Sınıf isimleri genellikle büyük harfle başlar (CamelCase).
  • pass ifadesi, şimdilik sınıfın içini boş bırakmak için kullanılır.

Nesne Oluşturma

kopek1 = Kopek()  # Kopek sınıfından bir nesne (örnek) oluştur
kopek2 = Kopek()  # Başka bir Kopek nesnesi oluştur
  • Sınıf adını parantezlerle çağırarak nesne oluşturulur.
  • Her nesne, sınıfın bir kopyasıdır, ancak kendi benzersiz özelliklerine sahip olabilir.

__init__ Metodu: Yapıcı Metot (Constructor)

  • Bir sınıftan nesne oluşturulduğunda otomatik olarak çağrılan özel bir metottur.
  • Nesnenin ilk özelliklerini (attributes) ayarlamak için kullanılır.
class Kopek:
    def __init__(self, isim, cins):
        self.isim = isim  # Nesnenin isim özelliği
        self.cins = cins  # Nesnenin cins özelliği

kopek1 = Kopek("Bobi", "Golden Retriever")
kopek2 = Kopek("Çakıl", "Terrier")

self Parametresi

  • Bir sınıfın içindeki metotların ilk parametresi self olabilir.
  • self, o anda üzerinde işlem yapılan nesneyi temsil eder.
  • Nesnenin özelliklerine ve diğer metotlarına self aracılığıyla erişilir.
class Kopek:
    def __init__(self, isim, cins):
        self.isim = isim
        self.cins = cins

    def havla(self):
        print(f"{self.isim} havlıyor!")

kopek1 = Kopek("Bobi", "Golden Retriever")
kopek1.havla()  # Çıktı: Bobi havlıyor!

Sınıf ve Örnek (Instance) Nitelikleri

  • Sınıf Nitelikleri (Class Attributes): Sınıfın kendisine ait özelliklerdir. Tüm nesneler tarafından paylaşılır.
  • Örnek Nitelikleri (Instance Attributes): Her nesnenin kendine özgü özellikleridir. self ile tanımlanırlar.
class Kopek:
    tur = "Memeli"  # Sınıf niteliği

    def __init__(self, isim, cins):
        self.isim = isim  # Örnek niteliği
        self.cins = cins  # Örnek niteliği

kopek1 = Kopek("Bobi", "Golden Retriever")
kopek2 = Kopek("Çakıl", "Terrier")

print(kopek1.isim)  # Çıktı: Bobi
print(kopek2.cins)  # Çıktı: Terrier
print(Kopek.tur)    # Çıktı: Memeli
print(kopek1.tur)   # Çıktı: Memeli (Sınıf niteliğine erişim)

Metotlar (Instance, Class, Static)

  • Bir sınıfın içindeki fonksiyonlara metot denir.

Instance Metotlar

  • Nesne üzerinde işlem yaparlar.
  • İlk parametreleri her zaman self olmalıdır.
class Kopek:
    # ... (önceki kodlar)

    def havla(self):
        print(f"{self.isim} havlıyor!")

    def otur(self):
        print(f"{self.isim} oturuyor.")

kopek1 = Kopek("Bobi", "Golden Retriever")
kopek1.havla()   # Çıktı: Bobi havlıyor!
kopek1.otur()    # Çıktı: Bobi oturuyor.

Class Metotlar

  • Sınıf üzerinde işlem yaparlar.
  • İlk parametreleri her zaman cls olmalıdır (sınıfın kendisini temsil eder).
  • @classmethod dekoratörü ile tanımlanırlar.

Dekoratörler

Fonksiyonların veya sınıfların davranışlarını değiştirmek veya genişletmek için kullanılan yapılardır. İleride daha detaylı incelenecektir.

class Kopek:
    tur = "Memeli"

    @classmethod
    def tur_bilgisi(cls):
        print(f"Köpekler {cls.tur} sınıfına aittir.")

Kopek.tur_bilgisi()  # Çıktı: Köpekler Memeli sınıfına aittir.

Static Metotlar

  • Ne nesne ne de sınıf üzerinde işlem yaparlar.
  • Sınıf içinde tanımlanmış, ancak sınıfın veya nesnenin özelliklerine erişmeyen yardımcı fonksiyonlar gibidirler.
  • @staticmethod dekoratörü ile tanımlanırlar.
class Matematik:
    @staticmethod
    def topla(x, y):
        return x + y

sonuc = Matematik.topla(5, 3)
print(sonuc)  # Çıktı: 8

Metot Parametreleri: self ve cls Farkı

  • self: Örnek (instance) metotlarında kullanılır. O anda üzerinde işlem yapılan nesneyi temsil eder.
  • cls: Sınıf (class) metotlarında kullanılır. Sınıfın kendisini temsil eder.

Basit Sınıf Örnekleri

Örnek 1: 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...")

    def durdur(self):
        print("Araba durduruluyor.")

Örnek 2: Dikdortgen Sınıfı

class Dikdortgen:
    def __init__(self, uzunluk, genislik):
        self.uzunluk = uzunluk
        self.genislik = genislik

    def alan_hesapla(self):
        return self.uzunluk * self.genislik

    def cevre_hesapla(self):
        return 2 * (self.uzunluk + self.genislik)

Örnek 3: Hayvan Sınıfı

class Hayvan:
    yas = 32
    def __init__(self, tur, yas, renk):
        self.tur = tur
        self.yas = yas
        self.renk = renk

    def beslen(self):
        return f"{self.tur} besleniyor."

    def foo():
        return "haydaaaaa"
# Hayvan sınıfından örnek nesneler oluşturma
kedi = Hayvan("Kedi", 3, "Siyah")
kopek = Hayvan("Köpek", 5, "Kahverengi")

# Örnek nesneler üzerinde metodları çağırma
print(kedi.beslen())
print(kopek.beslen())
print(kedi.yas)
print(Hayvan.yas)
print(Hayvan.foo())
print(kedi.foo())

Özet

  • Sınıflar, nesnelerin özelliklerini ve davranışlarını tanımlayan şablonlardır.
  • __init__ metodu, nesnelerin başlangıç durumunu ayarlar.
  • self, nesnenin kendisine referans verir.
  • cls, sınıf metodlarında sınıfın kendisine referans verir.
  • @staticmethod ve @classmethod dekoratörleri, sırasıyla statik ve sınıf metotları tanımlamak için kullanılır.

Gelecek Hafta

  • Kalıtım (Inheritance)
    • Üst Sınıf (Superclass) ve Alt Sınıf (Subclass)
    • super() Fonksiyonu
    • Metot Ezme (Method Overriding)

Alıştırmalar

  1. Ogrenci adında bir sınıf tanımlayın. Öğrencilerin adı, soyadı, numarası ve notları (liste olarak) gibi özellikleri olsun.
  2. Ogrenci sınıfına, öğrencinin not ortalamasını hesaplayan bir metot ekleyin.
  3. Ogrenci sınıfına, öğrencinin bilgilerini ekrana yazdıran bir metot ekleyin.
  4. İki farklı Ogrenci nesnesi oluşturun ve bu öğrencilerin bilgilerini ve not ortalamalarını ekrana yazdırın.
  5. Ogrenci sınıfına bir sınıf değişkeni ekleyin (toplam_ogrenci_sayisi gibi) ve her yeni öğrenci oluşturulduğunda bu sayıyı artırın.
  1. Kitap adında bir sınıf tanımlayın. Kitapların adı, yazarı, sayfa sayısı ve fiyatı gibi özellikleri olsun.
  2. Kitap sınıfına, kitabın bilgilerini ekrana yazdıran bir metot ekleyin.
  3. Kitap sınıfına, kitabın fiyatına belirli bir oranda indirim uygulayan bir metot ekleyin.
  4. Üç farklı Kitap nesnesi oluşturun ve bu kitapların bilgilerini ekrana yazdırın. Bir kitabın fiyatına indirim uygulayın ve tekrar yazdırın.