Object Oriented Programlama # 9 - Python Dersleri (Tutorials)

Words
417
Reading
2 min
Listen
Play
7y

object.jpg

Merhabalar

Python programlama derslerinin bu bölümünde kalıtımın en önemli konularından olan overriding konusundan bahsedeceğim.

Bu ders önceki dersleri takip ettiğiniz varsayılarak anlatılacaktır. Takip etmediyseniz öncelikle onlara bakmanız tavsiye edilir.

Önceki derslerimizde kalıtım konusu üzerine örnekler yapmıştık. Bu derste de o dersteki örnekler üzerinden gideceğim ki anlaşılması kolay olsun.

Önceki derslerimizde hatırlarsanız okul otomasyon sistemini hayal etmiştik. Okuldaki personelleri, object oriented programlamaya uyarlamaya çalışmıştık.

Bu durumda personel adında temel bir sınıf oluşturmuştuk. Sonrasında öğretmen ve işçi bilgilerini tutmak için de ogretmen ve isci adında iki sınıf oluşturup bu sınıfları da personel sınıfından miras aldırmıştık.

personel dediğimiz temel sınıf, öğretmen ve işçi sınfının ortak verilerini tutmaktadır. ogretmen ve isci sınıfları bu sınıftan miras aldıkları için personel sınıfındaki özellik ve metotları kullanabilirler.

Böylelikle kod tekrarının önüne geçilmiş olunmaktadır.

Şimdi mantığı anlattığımıza göre sınıfları verelim. personel sınıfımız :

personel sınıfı içerisinde özelliklerin olduğu init() fonksiyonu ve ek olarak bilgileriGoster() ve maasArtir() metotları bulunmaktadır.

Bu sınıftan miras alan ogretmen sınıfı ise aşağıdaki gibidir :

ogretmen sınıfının parantezleri içerisine miras aldığı personel sınıfı getirilmiştir.

ogretmen sınıfı, personel sınıfından miras aldığı için personel sınıfının metotlarını kullanabilir. Tabi bunun için ilk olarak ogretmen sınıfından bir nesne oluşturmalıyız.

ogretmenC nesnesi, ogretmen tipinde bir nesnedir ve constructor sınıfı çağrılırken verdiğimiz değerlerle oluşturulmuştur.

ogretmen sınıfı, miras aldığı personel sınıfının özellik ve metotlarını kullanabileceği gibi kendi bünyesinde de özellik ve metot bulundurabilir. Aynı şekilde bunları da kullanabilir.

ogretmen sınıfının içerisinde bulunan bilgileriDegistir() metodu, sadece ogretmen sınıfına ait bir metotdur ve herhangi bir ogretmen tipi nesne tarafından kullanılabilir.

Uygulamasını görelim :

bilgileriDegistir() metodunun içerisine yeni değerleri vererek çalıştırdık. Sonrasında bilgileriGoster() metodunu çalıştırarak kontrolünü yaptık. Gayet de güzel çalıştı.

Overriding

Peki biz miras aldığımız bir sınıfta bulunan bir metotla aynı isimde bir metot tanımlayabilir miyiz?

Örneğin personel sınıfı içerisindeki init() fonksiyonunu biz 3 parametreli değil de 4 parametreli yapmak istersek ne yapmamız gerekir?

İşte böylesi bir işlemde overriding kavramı devreye giriyor. Öncelikle uygulamasını görelim :

Görüldüğü gibi ogretmen sınıfı içerisinde init() fonksiyonunu 4 parametreli olarak baştan hazırladık. Sonrasında ogretmenD nesnesini oluştururken 4 parametre verdik. Kodumuzu çalıştırdığımızda hangi init() fonksiyonu çalışacak anlamak için de daha öncesinde init fonksiyonu içerisine kontrol amaçlı bir print() fonksiyonu yerleştirmiştik.

Sonuçta ekrana

Öğretmen sınıfının init fonksiyonu

yazısı yazıldı. Buradan anlıyoruz ki miras alınan sınıf ve alan sınıf içerisinde aynı isimle iki metot olsa da mirası alan sınıftaki metot dikkate alınıyor. Buna overriding deniliyor. Yani miras alınan sınıftaki aynı isimdeki metodu eziyor.

Şimdilik bu kadar.

Umarım faydalı bir çalışma olmuştur.

Teşekkürler.

yesilayrca.png

Kaynak belirtilmeyen görseller bana aittir. The pictures without source in the post is belong to me