Search
Generic filters
Exact matches only

PYTHON:OOP-İnheritance(Miras Alma-Verme)

0 4 sene önce

PYTHON:OOP-İnheritance(Miras alma-verme) Nedir?

Bugün OOP felsefesinin ana taşlarından bir tanesi olan İnheritance prensibini açıklayacağız.

Bir sınıfımız başka bir sınıfla ortak özellik taşıyabilir. Bizde kod tekrarına düşmeyerek bu prensibi kullanıp zaman ve enerji tasarrufu yaparız.

Örneğin Bir araba sınıfı oluşturduk.

Bir arabanın nesi vardır?

Adı,markası, modeli , seri num ve daha sayamadığımız bir sürü özellik.

Biz oluşturduğumuz araba sınıfına bu özellikleri atadık. Ondan sonra bir sport-car sınıfı yaratmak istedik.

Totalde baktığımızda spor arabanında; adı, modeli, markası ve bir sürü özelliği var. İşte tam da burada Araba sınıfından miras alarak bu özelllikleri tanımlayarak kod tekrarından kaçınıp, zaman ve enerjimizden tasarruf edip ve aynı zamanda hata aldığımızda bunu bir sınıfla bağlantılı kılarak miras aldığımız sınıfta değişiklik yapıp kullandığımız bütün sınıflarda hatayı düzeltmiş oluruz.

Miras veren sınıfa Üst Sınıf (Base Class,Super Class,Parent Class) denir.

(Üç kullanımda yaygındır) Miras alan sınıflara ise alt sınıf  (Child Class,Sub class) denir.

Nasıl İnheritance Yapılır?

Hep beraber verdiğimiz örneğin kod parçacığı üzerinde miras alma-verme işlemini uygulayalım;

class Araba:
    def __init(self,ad,marka, model,fiyat):
        self.ad=ad
        self.marka=marka
        self.model=model
        self.fiyat=fiyat

class SporAraba(Araba):
    def __init__(self,ad,marka,model,fiyat,baskaözellik):
        Araba().__init(ad,marka,model,fiyat)
        self.baskaozellik=baskaözellik

Araba sınıfımızı oluşturduk ve akabinde SporAraba adını verdiğimiz bir sınıf daha oluşturduk.

İki sınıfında ortak özelliği var olduğunu farkederek SporAraba sınıfının parantezleri içine Araba’yı yazarak İnheritance işlemini gerçekleştirdik.

Araba parent class‘ımız olurken sub classımız SporAraba sınıfı olmuş oldu özelliklerimizi bir kez daha tanımlamak yerine parantez içimize Araba sınıfını yerleştirerek o özellikleri kendimize aldık ve override ederek (yeniden yazma işlemi) özellik ekleyip kendi istediğimiz şekile soktuk.

Bu yaptığımız örnek Single-İnheritance işlemiydi. Üst sınıf bir alt sınıfa kalıtım verdi

Peki ya bir alt sınıftan birden fazla üst sınıftan miras alsaydı?

İşte bu işlemin adı da Multiple-İnheritance‘dır.

Diamond problem nedeniyle bazı diller tarafından desteklenmez. Ancak Python multiple inheritance‘ı destekler.Ve bu Diamond problemini çözecek yöntemi kendi bünyesinde barındırmıştır

Çok kısaca Diamond problemdende bahsedelim:

Biz Hayvanlar Alemi adında bir sınıf oluşturduk ve bu sınıftan Penguen ve Kartal adında iki farklı sınıf kalıttık.

Bu iki canlının Hareket etme özelliği birbirinden farklıdır. Kartal uçar ve Penguen uçamaz. Ve sonra biz bir sınıf oluşturduk bu sınıfın adı Kuşlar Sınıfı. Kuşlar Sınıfını Kartal ve Penguen sınıflarından kalıtım alarak oluşturduk.

İşte gelelim büyük soruna Kuşlar sınıfımızda Hareket etme özelliğimizi hangi sınıfa göre tanımlarız?

Kartal uçabilirken, Penguen uçamaz…

Peki biz hangisini tercih edeceğiz?

İşte bu arkadaşlar bu bir çıkmazdır ve Diamond problemi olarak adlandırılır.

Görselini hemen bırakıyorum;

Öğrenme sürecinde olan biri olarak Saygılar ve Sevgilerle….

Bir Cevap Yazın

X