Post

15- Sınıflar

Nesne tabanlı programlamanın temel elemanı sınıf yapısı açıklanmıştır.

15- Sınıflar

Python’da sınıflar (classes) ve nesneler (objects), Nesne Yönelimli Programlama’nın (OOP) temel yapı taşlarıdır. Sınıflar, nesnelerin nasıl davranacağını ve hangi özelliklere sahip olacağını tanımlayan şablonlardır. Nesneler ise, sınıflardan oluşturulan bireysel örneklerdir.

1. Sınıf (Class) Nedir?

Sınıf, bir varlığın özelliklerini (niteliklerini) ve bu varlıkla ilişkili işlemleri (metodları) tanımlayan bir yapıdır. Bir sınıfın içinde, bir nesnenin hangi özelliklere ve davranışlara sahip olacağını tanımlayabilirsiniz.

Sınıf tanımlama:

1
2
3
4
5
6
class Araba:
    marka = "Toyota"
    model = "Corolla"
    
    def calistir(self):
        print(f"{self.marka} {self.model} çalışıyor.")

Bu sınıf Araba, bir arabanın marka ve model bilgilerini ve arabayı çalıştırmak için bir işlevi içerir.

2. Nesne (Object) Nedir?

Nesne, bir sınıfın örneğidir. Sınıfta tanımlanan özelliklere ve işlevlere sahip gerçek bir varlıktır. Bir sınıftan birçok farklı nesne oluşturulabilir.

Sınıftan nesne oluşturma:

1
2
3
4
5
6
# Araba sınıfından bir nesne oluşturuyoruz
benim_arabam = Araba()

# Nesne üzerinden sınıfın özelliklerine ve metodlarına erişiyoruz
print(benim_arabam.marka)  # Çıktı: Toyota
benim_arabam.calistir()    # Çıktı: Toyota Corolla çalışıyor.

Yukarıdaki örnekte, Araba sınıfından bir benim_arabam nesnesi oluşturulmuş ve bu nesnenin özelliklerine (marka, model) ve işlevine (calistir) erişilmiştir.

3. __init__ Metodu ile Özelleştirilmiş Nesneler

Sınıflara, her nesnenin farklı özelliklere sahip olmasını sağlamak için __init__ metodu eklenir. Bu metod, bir nesne oluşturulduğunda otomatik olarak çalışır ve nesnenin ilk değerlerini belirler.

Örnek:

1
2
3
4
5
6
7
class Araba:
    def __init__(self, marka, model):
        self.marka = marka
        self.model = model
    
    def calistir(self):
        print(f"{self.marka} {self.model} çalışıyor.")

Bu sınıf, her araba için marka ve model bilgisini özelleştirebileceğimiz bir yapı sunuyor.

Nesne oluşturma:

1
2
3
4
5
6
7
# İki farklı nesne oluşturuyoruz
araba1 = Araba("Toyota", "Corolla")
araba2 = Araba("Honda", "Civic")

# Nesnelerle çalışıyoruz
araba1.calistir()  # Çıktı: Toyota Corolla çalışıyor.
araba2.calistir()  # Çıktı: Honda Civic çalışıyor.

4. Sınıflara Yeni Metodlar Ekleme

Bir sınıfa istediğimiz kadar metod ekleyebiliriz. Bu metodlar, nesneler üzerinde çalışacak işlevlerdir.

Örnek:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Araba:
    def __init__(self, marka, model, hiz=0):
        self.marka = marka
        self.model = model
        self.hiz = hiz
    
    def calistir(self):
        print(f"{self.marka} {self.model} çalışıyor.")
    
    def hizlan(self, miktar):
        self.hiz += miktar
        print(f"{self.marka} {self.model} hızlanıyor. Hız: {self.hiz} km/h")

    def fren_yap(self):
        self.hiz = 0
        print(f"{self.marka} {self.model} durdu.")

Nesne oluşturma ve metod çağırma:

1
2
3
4
araba1 = Araba("Toyota", "Corolla")
araba1.calistir()    # Çıktı: Toyota Corolla çalışıyor.
araba1.hizlan(50)    # Çıktı: Toyota Corolla hızlanıyor. Hız: 50 km/h
araba1.fren_yap()    # Çıktı: Toyota Corolla durdu.

Bu örnekte, Araba sınıfına hızlanma (hizlan) ve fren yapma (fren_yap) metodları ekledik. Her metod, nesnenin durumunu (hızını) değiştirebilir.

5. Nesneler Arası Farklılık ve Bağımsızlık

Her nesne, kendi verilerine ve durumuna sahiptir. Aynı sınıftan türeyen iki nesne birbirinden bağımsızdır.

Örnek:

1
2
3
4
5
6
7
8
araba1 = Araba("Toyota", "Corolla", 0)
araba2 = Araba("Honda", "Civic", 0)

araba1.hizlan(60)  # Çıktı: Toyota Corolla hızlanıyor. Hız: 60 km/h
araba2.hizlan(80)  # Çıktı: Honda Civic hızlanıyor. Hız: 80 km/h

print(araba1.hiz)  # Çıktı: 60
print(araba2.hiz)  # Çıktı: 80

Bu örnekte araba1 ve araba2 nesneleri birbirinden bağımsızdır. Bir nesnenin hızını değiştirmek, diğer nesnenin hızını etkilemez.


6. Kalıtım (Inheritance) ile Sınıfları Genişletme

Python’da sınıflar başka sınıflardan miras alabilir. Bu, kalıtım (inheritance) olarak bilinir. Yeni bir sınıf tanımlarken, var olan bir sınıfın özelliklerini ve metodlarını miras alabiliriz.

Örnek:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Arac:
    def __init__(self, marka, model):
        self.marka = marka
        self.model = model
    
    def calistir(self):
        print(f"{self.marka} {self.model} çalışıyor.")

# Araba sınıfı Arac sınıfından miras alıyor
class Araba(Arac):
    def __init__(self, marka, model, kapilar):
        super().__init__(marka, model)  # Üst sınıfın (Arac) __init__ metodunu çağırıyoruz
        self.kapilar = kapilar

    def kapilari_goster(self):
        print(f"{self.marka} {self.model} {self.kapilar} kapıya sahip.")

Nesne oluşturma:

1
2
3
araba1 = Araba("Toyota", "Corolla", 4)
araba1.calistir()        # Çıktı: Toyota Corolla çalışıyor.
araba1.kapilari_goster()  # Çıktı: Toyota Corolla 4 kapıya sahip.

Bu örnekte Araba sınıfı, Arac sınıfından miras alıyor. Yani Araba sınıfı, Arac sınıfındaki calistir metodunu kullanabilir ve ayrıca kendine özgü metodlar ekleyebilir.


7. Sonuç

  • Sınıf (class), bir varlığın özelliklerini ve davranışlarını tanımlayan bir şablondur.
  • Nesne (object), bir sınıfın bireysel örneğidir.
  • Sınıflar sayesinde, tekrar kullanılabilir ve modüler kod yazılabilir.
  • Sınıflara metodlar ekleyerek nesnelerin belirli işlevleri yerine getirmesini sağlayabiliriz.
  • Kalıtım sayesinde sınıflar arası ilişki kurabilir, özellik ve davranışları paylaşabiliriz.

Nesne yönelimli programlama (OOP), sınıflar ve nesneler üzerinden daha düzenli, modüler ve yönetilebilir kod yazmamıza olanak tanır.

This post is licensed under CC BY 4.0 by the author.