Kotlin’de Kalıtım ve Miras Alma

Kalıtım da Kalıtım

Adile Güngör ♾️ 🌎
Women in Technology
4 min readAug 10, 2023

--

Merhaba! Ben Kotlin ile Android Programlama Akademisi katılımcılarından Adile Güngör. Kotlin ile Android Programlama Akademisi, “Afetten Etkilenen Yazılımcı Gençlerin Güçlenmesi ve İstihdama Erişimi Projesi”, Sivil Toplum için Destek Vakfı ve Turkey Mozaik Foundation iş birliği ile hayata geçirilen Yerel Güçlenmeye Destek Fonu kapsamında sağlanan hibe desteğiyle gerçekleştirilmektedir.

Photo by Ramón Salinero on Unsplash

Bugün kalıtımdan bahsedelim mi? Her yerde var değil mi? Tabi Kotlin’in de vazgeçilmezi kendisi.

Kotlin'de Kalıtım (Inheritance):

Kalıtım, bir sınıfın (alt sınıf) başka bir sınıfın (üst sınıf ) özelliklerini ve davranışlarını miras almasıdır. Aynı zamanda, mevcut bir sınıfın kodunu tekrar kullanma, kodun yeniden kullanılabilirliğini artırma ve sınıf hiyerarşileri oluşturma amacıyla kullanırız.

Caylee Hammack GIF

Avantajları:

  1. Kodun Tekrar Kullanımı: Bir üst sınıfın özelliklerini ve davranışlarını alt sınıflar kullanabilir, böylece kodun tekrar yazılması önlenir.
  2. Kodun Modülerliği: Sınıf hiyerarşileri oluşturarak kodu daha organize bir şekilde tutabilirsiniz.
  3. Genelleştirme: Üst sınıfın genel özellikleri alt sınıflarda özelleştirilebilir ve genelleştirilebilir.
  4. Esneklik: Kalıtım sayesinde, varolan sınıflara yeni özellikler ve davranışlar eklemek daha kolaydır.

Miras almak istediğiniz sınıfın adını iki nokta üst üste (:) kullanarak belirtiriz. Örneğin:




// Üst Sınıf (Superclass)
open class Cicek(val tur: String) {

fun kokla() {
println("$tur çok güzel kokuyor")
}
}


class Gül(tur: String, val renk: String) : Cicek(tur) {

fun yapraklariKes() {
println("$renk gülün yapraklarını kesiyorum")
}
}


class Nergis(tur: String, val ozelAd: String) : Cicek(tur) {

fun bakimYap() {
println("$ozelAd nergisime bakıyorum, nergis en sevdiğim çiçek!")
}
}


fun main() {

val kirmiziGul = Gül("Kırmızı Gül", "kırmızı")
val beyazNergis = Nergis("Beyaz Nergis", "Şahane")

kirmiziGul.kokla()
kirmiziGul.yapraklariKes()

beyazNergis.kokla()
beyazNergis.bakimYap()
}

Biliyorum çok cıvıl cıvıl oldu. Ayrıca daha farklı kodlar da paylaşacağım aşağıda. Şimdi bunun ne işe yaradığına bakalım mı?

Happy Anniversary Dog GIF

Bu kodda, çiçekleri temsil eden üç farklı sınıfı kullanarak çalışan bir program görüyoruz.

Önce “Cicek” adında bir sınıf tanımladık. Bu sınıfın içine de çiçeğin türünü temsil eden bir “tur” adında bir özellik ve çiçeğin güzel kokusunu simüle eden bir “kokla” adında bir metod ekledik.

Sonra “Gül” adında bir sınıf tanımladık. Bu sınıf, “Cicek” sınıfından türetilmiş (kalıtım almış) bir alt sınıftır. “Gül” sınıfı, çiçeğin türünün yanı sıra rengini de temsil eden bir “renk” özelliğine sahiptir. Ayrıca “yapraklariKes” adındaki metod gülün yapraklarını kesmeyi simüle eder.

Nergis” adında başka bir alt sınıf daha var. Bu sınıf da “Cicek” sınıfından türetilmiş ve özel bir adı (“ozelAd”) temsil eden bir özelliğe sahiptir. “bakimYap” adındaki metod nergis çiçeğinin bakımını simüle eder.

Ana “main” fonksiyonunda, “kirmiziGul” ve “beyazNergis” adında iki çiçek örneği yazdık. Önce her bir çiçek koklanır ve özelleşmiş metodlar kullanılarak çiçeklere ilgili eylemler uyguladık.

Evet. Araba da severiz. Şimdi biraz arabaların üstünden geçelim.

The Ugly Duckling Cars GIF

open class Araba(val marka: String) {

fun hareketEt() {
println("$marka arabamız hareket ediyor")
}
}

class MercedesBenz(marka: String, val model: String) : Araba(marka) {

fun otomatikPark() {
println("$model otomatik park özelliğine sahip")
}
}

class Audi(marka: String, val yil: Int) : Araba(marka) {

fun sporModu() {
println("$marka, $yil modelimizi spor moduna alalım")
}
}

fun main() {
val mercedes = MercedesBenz("Mercedes Benz", "C-Class")
val audi = Audi("Audi", 2024)
//yani yazının güncelliğini sağlamak önemli, bu yüzden 2024 :D

mercedes.hareketEt()
mercedes.otomatikPark()

audi.hareketEt()
audi.sporModu()
}

Anlatmaya gerek yok diyenler var ama yazayım yine! Bu kod, arabaları temsil eden farklı sınıfları ve aralarındaki kalıtım ilişkisini gösteriyor.

1. Araba adında bir üst sınıf (superclass) tanımladık. Bu sınıf, arabaların ortak özelliği olan “marka” adında bir özelliğe sahiptir. Ayrıca, arabaların ortak davranışı olan “hareketEt” adında bir metot da bulunuyor.

2. MercedesBenz adında bir alt sınıf (subclass) tanımladık. Bu sınıfı, modelsınıfından türettik.MercedesBenz sınıfında, modeladında ek bir özellik taşıyan ve otomatik park özelliğini simüle eden otomatikPark adında bir metot var.

3. Audi adında başka bir alt sınıf (subclass) tanımladık. Bu sınıf da Araba sınıfından türedi. Audi sınıfında, yil adında bir özellik taşıyan ve spor modu özelliğini simüle eden sporModu adında bir metot var.

Ana main fonksiyonunda, bir MercedesBenz nesnesi ve bir Audi nesnesi oluşturuluyor. Oluşturulan nesneler, ilgili sınıfların özelliklerini ve metotlarını kullanarak işlemler gerçekleştiriyor:

mercedes nesnesiyle önce arabayı hareket ettiriyoruz, sonra otomatik park özelliğini kullanarak C-Class modelinin otomatik parkını simüle ediyoruz.
audi nesnesiyle de arabayı hareket ettiriyoruz, ardından Audi markalı ve 2024 modeli bir aracın spor modunu simüle ediyoruz.

Sonuç olarak, kod farklı arabaları temsil eden sınıfları ve bu arabaların özelliklerini, davranışlarını nasıl miras aldığını ve kullandığını gösteriyor.

Umarım keyifli olmuştur sizin için. Diğer yazılarımızda buluşalım. Hatırlamışken buraya bıraktığım yazı da faydalı olur dedim. İyi okumalar. Profilimdeki diğer yazılar da ilginizi çekecektir.

Dilerseniz GitHub ve Linkedin profilime göz atabilirsiniz. Ve sorularınızı iletebilirsiniz. Sevgiler.

--

--