İOS Swift

Swift Inheritance (Kalıtım)

Kalıtım

Kalıtım yada miras alma dediğimiz inheritance, bir sınıfın bir üst sınıftan metotları, propertyleri veya diğer sınıf karakteristiklerini miras almasıdır. Miras alınan sınıfa superclass, miras alan sınıfa ise subclass denir.

Miras alma kavramını daha iyi anlayabilmek için gerçek hayattan örnekler verebiliriz. Mesela miras alınan sınıfımız Araba olsun, miras alan sınıf ise Taksi olsun.

Araba sınıfımızın özellikleri şunlar olsun:

  • Renk
  • Motor Kapasitesi
  • Ağırlık
  • Yolcu Kapasitesi

Bu özellikler çoğaltılabilir.

Miras alan sınıfımız da Taksi sınıfı. Araba’da olan bütün özellikler de takside olmalı. Yani

  • Renk
  • Motor Kapasitesi
  • Ağırlık
  • Yolcu Kapasitesi özelliklerini Taksi sınıfımız Araba sınıfımızdan miras almış oldu.

Taksi sınıfı, araba sınıfındaki özellikleri miras alırken, bunların haricinde de özellikleri olabilir. Örneğin Taksi’nin;

  • Ticari taksi olup olmadığı
  • Taksinin tipi(sedan mı hatchback mi, vs) olması.

Bu özellikleri de daha sonra miras alan sınıfımıza tanımlayabiliriz.

Anlattıklarımızı bir görsel üzerinde gösterecek olursak;

miras alma

Katılım konusu sadece Swift programlama dili içerisinde olan bir konu değildir. Kalıtım, Nesne Yönelimli Programlama’nın temel prensiplerinden bir tanesidir ve nesne yönelimli programlama dillerinin hepsinde bulunur. Örneğin arkadaşımızın yazmış olduğu Java’ya Genel Bir Bakış yazısı içerisindeki inheritance kısmına göz atabilirsiniz.

Base Class

Herhangi bir sınıftan miras almayan sınıflara verilen isimdir.

Örnek olarak Vehicle adında bir base sınıf tanımlayacağız, bu sınıfın currentSpeed adında bir değişkeni olacak. Bu değişken read only olarak description adındaki değişken tarafından kullanılmaktadır ve aracın mevcut hızını göstermeye yarıyor.

class Vehicle {
    var currentSpeed = 0.0
    var description: String {
        return "Aracın mevcut hızı : (currentSpeed)"
    }
    func makeNoise() {
        //Ses çıkart :)
    }
}

 Yeni Bir Instance Oluşturma

let someVehicle = Vehicle()
//Vehicle sınıfından yeni bir instance oluşturduk.

println("Vehicle: (someVehicle.description)")
// Konsola "Aracın mevcut hızı : 0.0" yazdıracaktır.

Subclass

Miras alan sınıflara verilen isimdir. Genel syntax’ı şu şekildedir.

class SomeSubclass: SomeSuperclass {
    // miras alan sınıfın içeriği
}

Şimdi de biz üstte tanımladığımız Vehicle sınıfından Bicyle adında bir sınıf miras alalım. Vehicle sınıfına ek olarak, Bicyle sınıfının sepeti olup olmadığını gösteren de ayrıca bir property’si olsun. Bu property’ninde default değerini false olarak verelim

class Bicycle: Vehicle {
    var hasBasket = false
}

Bicyle sınıfını tanımladık. Dilerseniz Bicycle sınıfından yeni bir instance türeterek hem Vehicle hem de Bicyle sınıfında tanımladığımız property’lerinin değerlerini atayalım.

let bicycle = Bicycle()
//yeni bir instance türettik

bicycle.hasBasket = true
//Bicyle sınıfındaki propertysine değer atadık

bicycle.currentSpeed = 15.0
//Burada da Vehicle sınıfında tanımladığımız property değişkenine değer atadık

Peki gelelim iç gıcıklatan soruya 🙂 Miras alan sınıflardan miras alınabilir mi ?

Cevabımız evet 🙂 İşte örneği;

class Tandem: Bicycle {
    var currentNumberOfPassengers = 0
}

Tandem adında bir sınıf oluşturduk ve Bicyle’dan miras aldı.

let tandem = Tandem()
//yeni bir instance türettik

tandem.hasBasket = true
//Bicyle sınıfından gelen property'ye değer atadık

tandem.currentNumberOfPassengers = 2
//Tandem sınıfındaki propertye değer atadık

tandem.currentSpeed = 22.0
//Vehicle sınıfından gelen propertye değer atadık

3 Yorum

Muhammed ÖZDEMİR için bir yanıt yazın X