0Pricing
Scala for Backend Engineering & Functional Programming · Ders

Kalıtım ve Çok Biçimlilik

Scala'da kalıtım, soyut sınıflar ve çok biçimlilik gibi nesne yönelimli ilkeleri keşfedin.

Kalıtım ve Çok Biçimlilik, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming dersidir. Bu, 2 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Scala for Backend Engineering & Functional Programming öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Scala for Backend Engineering & Functional Programming kursu toplamda 2 dersten oluşur.

Kalıtım Nedir?

Kalıtım, Nesne Yönelimli Programlamanın (OOP) temel kavramlarından biridir ve yeni bir sınıfın mevcut bir sınıftan özellikleri ve davranışları (metotları) devralmasını sağlar.

Bunu bir "ebeveyn-çocuk" ilişkisi olarak düşünebilirsiniz. "Çocuk" sınıf (alt sınıf), "ebeveyn" sınıftaki (üst sınıf) kodu yeniden kullanarak zaman kazandırır ve tutarlılık sağlar.

  • Kodun yeniden kullanımını teşvik eder.
  • "-dır/-dir" ilişkisi kurar (örneğin, bir Dog bir Animal'dır).
  • Kodu bir hiyerarşi içinde düzenlemeye yardımcı olur.

İlk Temel Sınıfınız

Basit bir Animal sınıfı tanımlayalım. Bu sınıf, temel sınıfımız olacak; üst sınıf veya ebeveyn sınıf olarak da adlandırılır. Temel bir davranışı vardır: konuşmak.

Genel hayvanımızı çalışırken görmek için kodu çalıştırın!

class Animal {
  val name: String = "Generic Animal"
  def speak(): Unit = {
    println(s"$name makes a sound.")
  }
}

object Main {
  def main(args: Array[String]): Unit = {
    val myAnimal = new Animal()
    myAnimal.speak()
  }
}

`extends` ile Genişletme

Şimdi daha özel bir hayvan olan Dog sınıfını oluşturalım. Bir Dog bir Animal olduğu için extends anahtar sözcüğünü kullanarak Animal sınıfından kalıtım alabilir.

Ayrıca speak metodunu geçersiz kılarak Dog için kendine özgü bir ses tanımlayabiliriz. override anahtar sözcüğüne dikkat edin.

class Animal {
  val name: String = "Generic Animal"
  def speak(): Unit = {
    println(s"$name makes a sound.")
  }
}

class Dog extends Animal {
  override val name: String = "Dog"
  override def speak(): Unit = {
    println(s"$name barks!")
  }
}

object Main {
  def main(args: Array[String]): Unit = {
    val myAnimal = new Animal()
    val myDog = new Dog()
    myAnimal.speak() // Generic Animal makes a sound.
    myDog.speak()    // Dog barks!
  }
}

`override` Gücü

override anahtar sözcüğü Scala'da çeşitli nedenlerle çok önemlidir:

  • Açıklık: Bu metot veya alanın üst sınıftakinin yerine geçtiğini diğer geliştiricilere açıkça bildirir.
  • Güvenlik: Derleyici, mevcut bir üyeyi gerçekten geçersiz kılıp kılmadığınızı denetler. Bir yazım hatası yaparsanız veya üst sınıftaki metot değişirse derleyici sizi uyarır.
  • Niyet: Devralınan davranışı özelleştirme veya değiştirme niyetinizi açıkça belirtir.

Devralınan üyeleri yeniden tanımlarken her zaman override kullanın!

Çok Biçimlilik: Birçok Biçim

Çok biçimlilik, "birçok biçim" anlamına gelir. OOP'de farklı sınıflara ait nesnelerin ortak bir üst sınıfa ait nesneler gibi ele alınmasını sağlar.

Bu, Animal türünde bir değişkenin Dog, Cat veya Animal sınıfının başka herhangi bir alt sınıfına ait bir nesneyi tutabileceği anlamına gelir. Bu değişken üzerinde bir metot çağırdığınızda gerçek nesnenin türüne uygun metot çalıştırılır.

  • Esnek ve genişletilebilir kod yazılmasını sağlar.
  • Farklı veri türleri için tek bir arayüz kullanılmasına olanak tanır.
  • Metotların geçersiz kılınmasıyla gerçekleştirilir.

Uygulamada Çok Biçimlilik

Çok biçimliliğin nasıl çalıştığını görelim. Dog sınıfına benzer bir Cat sınıfı oluşturacağız. Ardından farklı hayvan türlerini ortak üst türleri olan Animal türündeki bir listeye ekleyip speak metotlarını çağırabiliriz.

Listedeki tüm hayvanlar Animal türü olarak ele alınmasına rağmen her birinin kendine özgü biçimde konuştuğuna dikkat edin.

class Animal {
  val name: String = "Generic Animal"
  def speak(): Unit = {
    println(s"$name makes a sound.")
  }
}

class Dog extends Animal {
  override val name: String = "Dog"
  override def speak(): Unit = {
    println(s"$name barks!")
  }
}

class Cat extends Animal {
  override val name: String = "Cat"
  override def speak(): Unit = {
    println(s"$name meows!")
  }
}

object Main {
  def main(args: Array[String]): Unit = {
    val animals: List[Animal] = List(
      new Animal(),
      new Dog(),
      new Cat()
    )

    animals.foreach(_.speak())
  }
}

Soyut Sınıflara Giriş

Bazen ortak bir arayüz tanımlayan ancak bazı üyeleri için eksiksiz bir uygulama sunmayan bir temel sınıf istersiniz. İşte bu noktada soyut sınıflar devreye girer.

Bir soyut sınıf:

  • Doğrudan örneklenemez (soyut bir sınıftan nesne oluşturamazsınız).
  • Soyut metotlar (uygulaması olmayan metotlar) ve somut metotlar (uygulaması olan metotlar) içerebilir.
  • Alt sınıflarının tamamlaması gereken bir taslak görevi görür.

Soyut Taslaklar Oluşturma

Bir abstract class Shape tanımlayalım. Her şeklin bir alanı vardır, ancak alanı hesaplama formülü her özel şekil için (daire, dikdörtgen vb.) farklıdır.

Bu nedenle area öğesini bir soyut metot olarak bildiririz. Gövdesinin (= { ... }) olmadığını fark edin. Uygulamasını sağlamak alt sınıfların sorumluluğunda olacaktır.

abstract class Shape {
  def area: Double // Abstract method, no implementation
  
  def describe(): Unit = {
    println("This is a geometric shape.")
  }
}

// You cannot do: new Shape() - it's abstract!

object Main {
  def main(args: Array[String]): Unit = {
    println("Abstract class Shape defined.")
    println("Cannot instantiate Shape directly.")
  }
}

Somut Uygulamalar

Şimdi abstract class Shape sınıfımızı genişleten Circle ve Rectangle gibi somut alt sınıflar oluşturalım. Bu alt sınıflar, soyut area metodu için bir uygulama sağlamalıdır.

Ayrıca somut describe() metodunu Shape sınıfından devralırlar.

abstract class Shape {
  def area: Double
  def describe(): Unit = {
    println("This is a geometric shape.")
  }
}

class Circle(radius: Double) extends Shape {
  override def area: Double = math.Pi * radius * radius
}

class Rectangle(width: Double, height: Double) extends Shape {
  override def area: Double = width * height
}

object Main {
  def main(args: Array[String]): Unit = {
    val circle = new Circle(5)
    val rectangle = new Rectangle(4, 6)

    println(s"Circle area: ${circle.area}")
    circle.describe()
    println(s"Rectangle area: ${rectangle.area}")
    rectangle.describe()
  }
}

Kalıtım ve Çok Biçimlilik Kontrolü

Scala'da kalıtım ve çok biçimlilik hakkında aşağıdaki ifadelerden hangileri DOĞRUDUR?

Tekrar: Kalıtım ve Çok Biçimlilik

Harika iş çıkardınız! Bu derste Scala'daki temel OOP kavramlarını inceledik:

  • Kalıtım: Alt sınıfların extends kullanarak kodu yeniden kullanması ve üst sınıflarla "-dır/-dir" ilişkisi kurmasıdır.
  • override Anahtar Sözcüğü: Devralınan metotları ve alanları açıkça yeniden tanımlamak, tür güvenliğini ve açıklığı sağlamak için gereklidir.
  • Çok Biçimlilik: Farklı alt sınıflara ait nesneleri ortak bir üst sınıfa ait nesneler gibi ele alma yeteneğidir; esnek ve genişletilebilir kod yazılmasını sağlar.
  • Soyut Sınıflar: Doğrudan örneklenemeyen, ortak arayüzleri ve alt sınıfların uygulaması gereken soyut üyeleri tanımlamak için kullanılan taslaklardır.

Bu kavramlar, iyi yapılandırılmış ve bakımı kolay Scala uygulamaları oluşturmak için hayati önem taşır!

Sıkça Sorulan Sorular

“Kalıtım ve Çok Biçimlilik” dersi ücretsiz mi?

Evet — “Kalıtım ve Çok Biçimlilik” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Scala for Backend Engineering & Functional Programming kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Scala for Backend Engineering & Functional Programming kursu toplamda 2 dersten oluşur.

“Kalıtım ve Çok Biçimlilik” dersinde ne öğreneceğim?

Scala'da kalıtım, soyut sınıflar ve çok biçimlilik gibi nesne yönelimli ilkeleri keşfedin. Scala for Backend Engineering & Functional Programming ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Scala for Backend Engineering & Functional Programming öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Scala for Backend Engineering & Functional Programming, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 2 dersinin 2. dersidir.

“Kalıtım ve Çok Biçimlilik” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Scala for Backend Engineering & Functional Programming dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Scala for Backend Engineering & Functional Programming dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Sınıflar, Nesneler ve Paketleme
  2. Kalıtım ve Çok Biçimlilik
← Scala for Backend Engineering & Functional Programming Sayfasına Dön