Kotlin: Bitki Türleri ile Polymorphism 🌺🌳

Merve ÖZ
3 min readAug 23, 2023

--

Herkese merhabaa. İlk yazımda Polymorphism üzerinde durmak istiyorum. Umarım okurken keyif alırsınız. Hazırsanız başlayalım.

Nesne yönelimli programlamada (OOP), farklı nesne türlerinin aynı arayüzü kullanarak benzer davranışlar sergileyebilmesini sağlayan önemli bir kavram olan polymorphism, kodun daha anlaşılır, esnek ve genişletilebilir olmasını sağlar. Kotlin programlama dilinde bitki türlerini temsil eden bir hiyerarşi oluşturarak polymorphism’i nasıl uygulayabileceğimizi adım adım inceleyeceğiz.

Bitki Hiyerarşisi Oluşturma

Örneğimizde bitki türlerini temsil eden bir hiyerarşi oluşturacağız. Bu hiyerarşide Bitki adında bir üst sınıfımız olacak ve bu sınıftan türeyen alt sınıflarımız farklı bitki türlerini temsil edecek. Her bitki türü, büyüme hızı, çiçek açma durumu ve kokusu gibi özelliklere sahip olacak:

// Bitki sınıfını tanımlıyoruz
open class Bitki(val tur: String, val cicekAcma: Boolean) {
// Büyüme hızını belirlemek için soyut bir metot
open fun buyumeHizi(): String {
return "Bilgi yok"
}

// Çiçek açma durumunu belirlemek için metot
fun cicekDurumu(): String {
return if (cicekAcma) "Çiçek açıyor" else "Çiçek açmıyor"
}

// Kokusunu belirlemek için soyut bir metot
open fun kokusu(): String {
return "Bilgi yok"
}
}

// Alt sınıflar burada yer alacak

Bitki Türlerine Göre Alt Sınıflar

Bitki türlerine göre üç farklı alt sınıf oluşturacağız: Agac, CicekliBitki ve Ot. Bu alt sınıflar, üst sınıfın metotlarını ezerek (override) kendi özelliklerini ve davranışlarını sağlayacaklar.

// Agac sınıfını tanımlıyoruz
class Agac(tur: String, cicekAcma: Boolean) : Bitki(tur, cicekAcma) {
// Agac'ın büyüme hızını belirliyoruz
override fun buyumeHizi(): String {
return "Yavaş"
}

// Agac'ın kokusunu belirliyoruz
override fun kokusu(): String {
return "Kokusuz"
}
}

// CicekliBitki sınıfını tanımlıyoruz
class CicekliBitki(tur: String, cicekAcma: Boolean, val kokulu: Boolean) : Bitki(tur, cicekAcma) {
// CicekliBitki'nin büyüme hızını belirliyoruz
override fun buyumeHizi(): String {
return "Orta"
}

// CicekliBitki'nin kokusunu belirliyoruz
override fun kokusu(): String {
return if (kokulu) "Kokulu" else "Kokusuz"
}
}

// Ot sınıfını tanımlıyoruz
class Ot(tur: String, cicekAcma: Boolean) : Bitki(tur, cicekAcma) {
// Ot'un büyüme hızını belirliyoruz
override fun buyumeHizi(): String {
return "Hızlı"
}

// Ot'un kokusunu belirliyoruz
override fun kokusu(): String {
return "Kokusuz"
}
}

Polymorphism Uygulaması

Ana fonksiyonumuz olan main fonksiyonunda, farklı bitki türlerinin özelliklerini ve davranışlarını kullanarak polymorphism’i gözlemleyeceğiz:

fun main() {
val agac: Bitki = Agac("Meşe", false)
val kokuluCicek: Bitki = CicekliBitki("Gül", true, true)
val kokusuzCicek: Bitki = CicekliBitki("Menekşe", true, false)
val ot: Bitki = Ot("Çimen", false)

println("Ağacın Büyüme Hızı: ${agac.buyumeHizi()}, ${agac.cicekDurumu()}, ${agac.kokusu()}")
println("Kokulu Çiçekli Bitkinin Büyüme Hızı: ${kokuluCicek.buyumeHizi()}, ${kokuluCicek.cicekDurumu()}, ${kokuluCicek.kokusu()}")
println("Kokusuz Çiçekli Bitkinin Büyüme Hızı: ${kokusuzCicek.buyumeHizi()}, ${kokusuzCicek.cicekDurumu()}, ${kokusuzCicek.kokusu()}")
println("Otu Büyüme Hızı: ${ot.buyumeHizi()}, ${ot.cicekDurumu()}, ${ot.kokusu()}")

}

Kaktüs Sınıfı Ekleyebilir miyiz?

Bu örneğimize Kaktüs sınıfı dahil ederek geliştirebiliriz. Bunun için önce bir Kaktüs sınıfı oluşturmalı ve yukarıda yaptığımız gibi Bitki sınıfının özelliklerini almalıyız:

// Kaktüs sınıfını tanımlıyoruz
class Kaktus(tur: String, cicekAcma: Boolean, dikenli: Boolean) : Bitki(tur, cicekAcma) {
//Kaktüsün büyüme hızını belirliyoruz
override fun buyumeHizi(): String {
return "Yavaş"
}

//Kaktüsün koku durumunu belirliyoruz
override fun kokusu(): String {
return "Kokusuz"
}

//Kaktüsün diken durumunu belirliyoruz
fun dikenDurumu(): String {
return if (dikenli) "Dikenli" else "Dikensiz"
}
}

Bitki sınıfından aldığımız özelliklerin yanında Kaktüs sınıfının kendi dikenli: Boolean parametresi olsun. Bu parametre true geldiği zaman dikenDurumu() fonksiyonu sonucu “Dikenli” olarak döndürsün.

Son olarak main() fonksiyonuna kaktüs sınıfından oluşturduğumuz bir nesne ekleyelim ve özelliklerini test edelim:

fun main() {

val kaktus = Kaktus("Sculent",true,true)

println("Kaktüsün büyüme hızı: ${kaktus.buyumeHizi()}, ${kaktus.kokusu()}, ${kaktus.dikenDurumu()}")
}

Sonuç:

Bu yazıda, Kotlin programlama dilinde bitki türlerini temsil eden bir hiyerarşi oluşturarak polymorphism’i nasıl kullanabileceğimizi gördük. Polymorphism, nesne yönelimli programlamadaki önemli bir kavramdır ve kodun daha anlaşılır, esnek ve genişletilebilir olmasını sağlar. Üst sınıfın metotlarını alt sınıflarda override ederek farklı davranışları yönetebilir ve türler arası geçişleri kolayca gerçekleştirebiliriz.

Umarım faydalı olmuştur, herkese happy coding 👩🏻‍💻

--

--

Merve ÖZ
Merve ÖZ

Written by Merve ÖZ

Electrical and Electronics Engineer | MSc Management Information Systems

No responses yet