Nesne Tabanlı Programlama -3- (OOP)

Gökhan YAVAŞ
gokhanyavas
Published in
2 min readDec 17, 2016

Nesne Tabanlı Programlamanın oldukça geniş kapsamlı bir konu olduğunu fark etmişsinizdir. Bu yazıda konunun ileri düzey yönlerini inceleyeceğiz.

Bu seriyi bitirdiğimizde, OOP’nin karmaşık yönlerini daha kolay anlamamızı kavrayacak GUI arayüzünü kullanarak örnekler geliştireceğiz.

Miras Alma (Inheritance)

Miras alma, OOP’nin en önemli konularından birisidir. Miras alma konusunu tamamladığımızda GUI programları yazabilmeyi ve yazılmış GUI örneklerini okuyabilecek yapıda olacaksınız. Python Programlama dilinin ana felsefesi, bir yazılan kodların en verilimli seviyede tekrar tekrar kullanılmasıdır. Yani, miras alma yazılan kodların tekrar kullanılmasını sağlayan OOP özelliğidir. İsterseniz bir örnek ile başlayalım:

class Ebeveyn:
"""ebeveyn sinifimiz"""
def annenin_goz_rengi(self):
return 'mavi'
def babanin_sac_rengi(self):
return 'sari'
class Cocuk(Ebeveyn): #Cocuk sinifi Ebeveyn Sinifindan miras aldi
"""cocuk sinifimiz"""
def __init__(self, adi=''):
self.adi = adi
def benzerlik(self):
print(self.adi,"nin sac rengi muhtemelen", self.babanin_sac_rengi(), "olacak.")
Bir çocuğun, özelliklerini anne ve babasından aldığını biliyoruz. O halde, çocuk saç ve göz rengini ebeveynlerinden alabilir. Ebeveyn sınıfımızda, bahsettiklerimizi tanımladık. Cocuk sınıfı, Ebeveyn'nin özelliklerini miras alacağından, parantez içinde yazarız. Tıpkı örnekteki gibi. Sınıf tanımlarken, miras alınmasını istediğimiz tüm sınıfları parantez içinde yazarız.
Cocuk sınıfına dikkat ettiyseniz, Ebeveyn sınıfında tanımlı işlevleri, bu sınıfın içinde yazılıymış gibi kullandık. Bunun nedeni Cocuk sınıfının Ebeveyn sınıfından miras almasıdır. İşte gördüğünüz gibi miras alma kavramı bu denli basit.Yaptığımız bu örneği test edelim:Öncelikle ilgili dosyamızı içe aktaralım. Ardından çocuk nesnesi oluşturalım.import Canli
ece = Canli.Cocuk('Ece')
ece.benzerlik()
Cıktı:
Ece nin sac rengi muhtemelen sari olabilir.
Bu kodların açıklamalarını önceki OOP anlatımlarında bulabilirsiniz.Taban Sınıflar (Base Classes): Birkaç farklı sınıfta ortak olan nitelik ve mototları barındıran sınıfa denir. İngilizcede base classes olarak adlandırlan taban sınıflar, üst sınıf (super class) veya ebeveyn sınıf (parent class ) olarak da adlandırılır.Alt Sınıflar (Sub Classes): Bir taban sınıftan üreyen tüm sınıflar, o taban sınıfın alt sınıflarıdır. Alt sınıflar, kendilerinden türedikleri taban sınıfların metot ve niteliklerini miras yoluyla devralır.super(): Miras alınan üst sınıfa atıfta bulunan super() fonksiyonu, miras alınan bir üst sınıfın nitelik ve metotları üzerinden değişiklik yaparken, mevcut özelliklerini muhafaza edebilmemizi sağlar.Çoklu Miras Alma (Multiple Inheritance)Python'da bir sınıf, aynı anda birden fazla miras alabilir. Şu şekilde gerçekleştirilir:class Hesapla(sinif1, sinıf2, sinif3):
pass
Çoklu miras alma ile ilgili örneğimizi inceleyelim:class Ebeveyn:
"""ebeveyn sinifimiz"""
def annenin_goz_rengi(self):
return 'mavi'
def babanin_sac_rengi(self):
return 'sari'
class Amca(object):
def amca_sac_tipi(self):
return 'Dalgali'
class Cocuk(Ebeveyn, Amca): #Cocuk sinifi Ebeveyn Sinifindan miras aldi
"""cocuk sinifimiz"""
def __init__(self, adi=''):
self.adi = adi
def benzerlik(self):
print(self.adi,"nin sac rengi muhtemelen", self.babanin_sac_rengi(), "ve",
self.amca_sac_tipi(), "olabilir.")
Örneğimizde, Amca isimli yeni bir sınıf tanımladık. Şimdi, çocuk hem Ebeveyn'den hemde Amca sınıfından miras alacak. Burada, Amca sınıfında bir object ifadesini dikkatinizi çekmiş olmalı. Python'nun yeni sürümlerinde (3.x sonrası) sınıfların, object adlı bir sınıftan miras alması gerekir. Nesne Tabanlı Programlama'da 3. serimizin sonunu geldik.

--

--