CodeBlanks Logo Icon CodeBlanks

Subtyping

Subtyping ve polymorphism öğrenirsin.

Subtyping

Subtyping, bir türün başka bir türün alt türü (subtype) olmasıdır. class Dog extends Animal durumunda Dog, Animal'ın alt türüdür. Bir Animal değişkenine Dog atanabilir (polymorphism).

Alt tür, üst türün sözleşmesini korumalı: üst türün metotlarını desteklemeli ve aynı davranışı sergilemelidir. Dart'ta extends ile kalıtım, implements ile arayüz uygulama, with ile mixin kullanımı sağlanır.

Polymorphism ve override

Polymorphism, bir üst tür değişkeninin alt tür örneklerini tutabilmesidir. Animal a = Dog(); geçerlidir. @override annotation'ı alt türün üst tür metodunu yeniden tanımladığını belirtir: @override String speak() => 'Hav';.

Dart, @override kullanımını önerir; yanlış imza yazılırsa derleme hatası verir. Polymorphism, kodu üst tür üzerinden yazıp alt türlere özelleştirmeyi sağlar.

Uygulama Animal ve Dog alt tür

Bir Animal sınıfı tanımla: String speak() => 'Ses'; metodu. Dog sınıfı Animal'ı extends etsin ve @override String speak() => 'Hav'; metodu içersin. main içinde final Animal a = Dog(); yarat; print(a.speak()); ile sonuçu yazdır.

Başlangıç kodu

main.dart
void main() {
  // Animal sınıfını ve Dog alt türünü tanımla
  // üst tür değişkenine Dog örneği ata; speak() yazdır
}

Örnek çözüm

main.dart
class Animal {
  String speak() => 'Ses';
}

class Dog extends Animal {
  @override
  String speak() => 'Hav';
}

void main() {
  final Animal a = Dog();
  print(a.speak());
}

Beklenen çıktı

Hav

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir alt tür (subtype) neyi karşılamalıdır?

  • Üst türün sözleşmesini (behavior) korumalı Doğru cevap
  • Yalnızca aynı alan adlarına sahip olmalı
  • Daha az metot içermeli
  • Aynı kurucu parametreleri kullanmalı

Açıklama: alt tür üst türün sözleşmesini korumalı (Liskov substitution).

2 Subtyping ilişkilerini eşleştir

Kavram Anlamı
extends Kalıtım
implements Arayüz uygulama
with Mixin kullanımı
Dog <: Animal Alt tür örneği

3 @override annotation

Soru
class Dog extends Animal {
  @____
  String speak() => 'Hav';
}
Cevap
class Dog extends Animal {
  @override
  String speak() => 'Hav';
}

Açıklama: @override metodun yeniden tanımlandığını belirtir.

Uzman bölümündeki tüm dersler