Soyut Sınıflar
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 43 / 110.
soyut sınıf, doğrudan örneği oluşturulamayan bir sınıftır. Diğer sınıflar için bir şablon görevi görür ve alt sınıfların uyması gereken ortak bir yapı tanımlar. Bir tane oluşturmak için abstract anahtar sözcüğünü kullanırsınız.
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, yine de uygulamalara sahip normal metotlara (örneğin describe()) ve kuruculara sahip olabileceğine dikkat edin. Alt sınıflar, normal kalıtımda olduğu gibi bunları devralır. Temel fark, soyut sınıfın kendisinin bir örneğini oluşturamamanızdır; somut bir alt sınıf kullanmalısınız.
Görev
KolayDaha özel türler için soyut sınıfların 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şleteceksin.
Kodunu iki dosyada düzenleyeceksin:
vehicle.dart: Araç hiyerarşini burada tanımla:- Bir
abstract class Vehicle;String brandveint yearözelliklerine sahip olsun. Her iki değeri alan bir kurucu vedisplayInfo()yazdıran bir[brand] ([year])metodu ekle. Carsınıfını genişleten ve birVehicleözelliği ekleyen birint doorssınıfı oluştur.honk()yazdıran birBeep beep!metodu ekle.Motorcyclesınıfını genişleten ve birVehicleözelliği ekleyen birbool hasSidecarsınıfı oluştur.revEngine()yazdıran birVroom!metodu ekle.
- Bir
main.dart: Araç dosyanı içe aktar ve soyut sınıfların nasıl çalıştığını göster:Carmarkasına,'Toyota'yılına ve2022kapıya sahip bir4oluştur.displayInfo()metodunu çağır (Vehicle sınıfından miras alınmıştır).Doors: [doors]yazdır.honk()metodunu çağır.- Boş bir satır yazdır.
Motorcyclemarkasına,'Harley'yılına ve2021değerinde hasSidecar özelliğine sahip birfalseoluştur.displayInfo()metodunu çağır.Has sidecar: [hasSidecar]yazdır.revEngine()metodunu çağır.
Vehicle soyut olduğu için doğrudan bir örneğini oluşturamayacağını unutma; somut alt sınıflardan birini kullanmalısın. 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!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
1Nesne Tabanlı Programlamanın Temelleri
Harici DosyalarKütüphaneler ve İçe AktarmalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar SözcüğüMetotlarÖrnek DeğişkenleriYapıcıların TemelleriTekrar - Basit Hesap Makinesi4Null Güvenliği
Null Güvenliğine GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Sözcüğü ve Null GüvenliğiNull-Aware OperatörlerSınıflarda Null GüvenliğiTekrar - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulamak ve GenişletmekBirden Çok ArayüzTekrar - Şekil Hesaplayıcı10Koleksiyonlar ve Generics
List, Set, Map Genel BakışTür Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorTekrar - Generic Depolama2Dart'ta Yapıcılar
Varsayılan YapıcıAdlandırılmış YapıcılarBaşlatıcı ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Ön Ek KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DerinliğiBilgi GizlemeTekrar - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Çok Mixin KullanımıMixin'lerde on Anahtar SözcüğüMixin ve Kalıtım KarşılaştırmasıMixin ve Arayüz KarşılaştırmasıÖzet - Hayvan Sistemi11Özel Metotlar
toString() Geçersiz KılmahashCode & == Geçersiz KılmaComparable Arayüzücall() MetodunoSuchMethod Geçersiz KılmaÖzet - Özel Koleksiyon14Tasarım Desenleri Bölüm 1
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy Deseni3Sınıf Özellikleri
Örnek ve Static ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatic Metotlar ve AlanlarGetter ve Setter'larÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar SözcüğüMetot Geçersiz Kılma@override Açıklamasıfinal Sınıf Anahtar SözcüğüKurucular ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriArayüzler Yoluyla Çok BiçimlilikÇalışma Zamanı Tür Denetimiis ve as OperatörleriCovariant Anahtar KelimesiTekrar - Ödeme İşlemcisi12Asenkron OOP
Future'ler ve async/awaitStream TemelleriStream DenetleyicileriAsenkron YapıcılarSınıf Metotlarında AsenkronlukÖzet - Veri Getirici15Tasarım Desenleri Bölüm 2
Komut DeseniAdaptör DeseniDekoratör DeseniŞablon Metot DeseniDurum DeseniBileşik DesenDepo DeseniKendi başına pratik yap: Online Dart derleyicisi