Kotlin’de Kalıtım ve Miras Alma
Kalıtım da Kalıtım
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.
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.
Avantajları:
- 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.
- Kodun Modülerliği: Sınıf hiyerarşileri oluşturarak kodu daha organize bir şekilde tutabilirsiniz.
- Genelleştirme: Üst sınıfın genel özellikleri alt sınıflarda özelleştirilebilir ve genelleştirilebilir.
- 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ı?
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.
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ı, model
sınıfından türettik.MercedesBenz
sınıfında, model
adı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.