Soyut Sınıflar
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 43 / 110.
Bir soyut sınıf (abstract class), doğrudan örneği oluşturulamayan bir sınıftır. Diğer sınıflar için bir taslak görevi görür ve alt sınıfların uyması gereken ortak bir yapıyı tanımlar. abstract anahtar kelimesini kullanarak bir tane oluşturursunuz.
abstract class Shape {
String color;
Shape(this.color);
void describe() {
print('A $color shape');
}
}
class Circle extends Shape {
double radius;
Circle(String color, this.radius) : super(color);
}
void main() {
// Shape s = Shape('red'); // Hata! Soyut sınıf örneklendirilemez
var circle = Circle('blue', 5.0);
circle.describe(); // Mavi bir şekil
}Soyut sınıflar, kendi başına var olamayacak kadar genel bir kavramınız olduğunda kullanışlıdır. Bir "Şekil" bir fikirdir, ancak bir daire mi, dikdörtgen mi yoksa üçgen mi olduğunu bilmeden bir şekil çizemezsiniz. Soyut sınıf, tüm şekillerin ortak noktalarını tanımlarken, somut alt sınıflar belirli ayrıntıları sağlar.
Soyut sınıfların (abstract classes) hala uygulamaları olan normal metotlara (describe() gibi) ve yapıcılara (constructors) sahip olabileceğine dikkat edin. Alt sınıflar, tıpkı normal kalıtımda olduğu gibi bunları miras alır. Temel fark, soyut sınıfın kendisinden bir örnek (instance) oluşturamamanızdır; somut bir alt sınıf kullanmanız gerekir.
Görev
KolaySoyut sınıfların daha spesifik türler için nasıl taslak görevi gördüğünü gösteren bir araç sistemi oluşturalım. Tüm araçların ortak özelliklerini tanımlayan soyut bir temel sınıf oluşturacak, ardından bunu somut araç türleriyle genişleteceksiniz.
Kodunuzu iki dosya halinde düzenleyeceksiniz:
vehicle.dart: Araç hiyerarşinizi burada tanımlayın:String brandveint yearözelliklerine sahip birabstract class Vehicle. Her iki değeri de alan bir yapıcı (constructor) ve[brand] ([year])yazdıran birdisplayInfo()metodu ekleyin.Vehiclesınıfını genişleten ve birint doorsözelliği ekleyen birCarsınıfı.Beep beep!yazdıran birhonk()metodu ekleyin.Vehiclesınıfını genişleten ve birbool hasSidecarözelliği ekleyen birMotorcyclesınıfı.Vroom!yazdıran birrevEngine()metodu ekleyin.
main.dart: Araç dosyanızı içe aktarın ve soyut sınıfların nasıl çalıştığını gösterin:- Markası
'Toyota', yılı2022ve kapı sayısı4olan birCaroluşturun. - (Vehicle sınıfından miras alınan)
displayInfo()metodunu çağırın. Doors: [doors]yazdırın.honk()metodunu çağırın.- Boş bir satır yazdırın.
- Markası
'Harley', yılı2021ve hasSidecar değerifalseolan birMotorcycleoluşturun. displayInfo()metodunu çağırın.Has sidecar: [hasSidecar]yazdırın.revEngine()metodunu çağırın.
- Markası
Vehicle soyut olduğu için doğrudan bir örneğini oluşturamayacağınızı unutmayın; somut alt sınıflardan birini kullanmalısınız. Hem Car hem de Motorcycle, displayInfo() metodunu soyut üst sınıftan miras alır.
Beklenen çıktı:
Toyota (2022)
Doors: 4
Beep beep!
Harley (2021)
Has sidecar: false
Vroom!Kopya kağıdı
Bir soyut sınıf (abstract class), doğrudan örneği oluşturulamayan bir sınıftır. Diğer sınıflar için bir taslak görevi görür ve alt sınıfların uyması gereken ortak bir yapıyı tanımlar. abstract anahtar kelimesini kullanarak bir tane oluşturun:
abstract class Shape {
String color;
Shape(this.color);
void describe() {
print('A $color shape');
}
}
class Circle extends Shape {
double radius;
Circle(String color, this.radius) : super(color);
}
void main() {
// Shape s = Shape('red'); // Hata! Soyut sınıfın örneği oluşturulamaz
var circle = Circle('blue', 5.0);
circle.describe(); // A blue shape
}Soyut sınıflar şunlara sahip olabilir:
- Uygulamaları olan normal metotlar
- Yapıcılar (Constructors)
- Özellikler (Properties)
Alt sınıflar, tıpkı normal kalıtımda olduğu gibi bu üyeleri miras alır. Temel fark, soyut sınıfın kendisinden bir örnek oluşturamamanızdır; somut bir alt sınıf kullanmanız gerekir.
Kendin dene
import 'vehicle.dart';
void main() {
// TODO: Markası 'Toyota', yılı 2022 ve kapı sayısı 4 olan bir Araba (Car) oluşturun
// TODO: Araba üzerinde displayInfo() metodunu çağırın
// TODO: "Doors: [doors]" ifadesini yazdırın
// TODO: Araba üzerinde honk() metodunu çağırın
// TODO: Boş bir satır yazdırın
// TODO: Markası 'Harley', yılı 2021 ve hasSidecar değeri false olan bir Motosiklet (Motorcycle) oluşturun
// TODO: Motosiklet üzerinde displayInfo() metodunu çağırın
// TODO: "Has sidecar: [hasSidecar]" ifadesini yazdırın
// TODO: Motosiklet üzerinde revEngine() metodunu çağırın
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarKütüphaneler ve ImportlarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarÖrnek DeğişkenleriConstructor TemelleriÖzet - Basit Hesap Makinesi4Null Safety
Null Safety'ye GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Kelimesi ve Null SafetyNull-Aware OperatörleriSınıflarda Null SafetyÖzet - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulama vs. GenişletmeÇoklu ArayüzlerÖzet - Şekil Hesaplayıcı10Koleksiyonlar ve Generic'ler
List, Set, Map Genel BakışTip Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorÖzet - Generic Depolama2Dart'ta Yapıcılar
Varsayılan Yapıcıİsimlendirilmiş Yapıcılarİlklendirme ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Öneki KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DetaylarıBilgi GizlemeÖzet - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Fazla Mixin KullanımıMixin'lerde on Anahtar KelimesiMixin vs KalıtımMixin vs ArayüzÖzet - Hayvan Sistemi11Özel Metotlar
toString() OverridehashCode ve == OverrideComparable Arayüzücall() MetodunoSuchMethod OverrideÖzet - Özel Koleksiyon14Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı17Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakter SistemiAraç Kiralama Servisi3Sınıf Özellikleri
Instance ve Statik ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatik Metotlar ve AlanlarGetters ve SettersÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar KelimesiMetot Ezme@override Anotasyonufinal Sınıf Anahtar KelimesiYapıcı Metotlar ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriInterface'ler ile Çok BiçimlilikÇalışma Zamanı Tip Kontrolüis ve as OperatörleriCovariant Anahtar KelimesiÖzet - Ödeme İşlemcisi12Asenkron OOP
Futures ve async/awaitStream TemelleriStream Controller'larAsenkron KurucularSınıf Metotlarında Asenkron KullanımıÖzet - Data Fetcher15Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıRepository Kalıbı