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;
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
Swift Closures’i de anlatabilir misiniz ? Teşekkürler
Merhaba, tabiki anlatırım.
[…] Swift Inheritance (Kalıtım) […]
merhabalar, site tasarımınıza bayıldım logları hangı uygulama ile üretriğinizi merak ettim paylaşırsanız sevinirim.
[…] http://kod5.org/swift-inheritance-kalitim/ […]