Subtyping
- Dart kursu
- Uzman
- Ders 4/47
- 5 dk
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
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
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
class Dog extends Animal {
@____
String speak() => 'Hav';
}
class Dog extends Animal {
@override
String speak() => 'Hav';
}
Açıklama: @override metodun yeniden tanımlandığını belirtir.