Zusammenfassung – Generische Speicherung
Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy — Lektion 69 von 110.
Aufgabe
EinfachLassen Sie uns ein generisches Speichersystem bauen, das alles kombiniert, was Sie über Collections und Generics gelernt haben! Sie werden eine Storage<T>-Klasse erstellen, die Elemente eines beliebigen Typs speichern, abrufen und mit einer for-in-Schleife iteriert werden kann.
Sie werden Ihren Code in zwei Dateien organisieren:
storage.dart: Erstellen Sie Ihr generisches Speichersystem mit zwei Klassen:- Eine
StorageIterator<T>-Klasse, dieIterator<T>implementiert, um die Iteration über gespeicherte Elemente zu ermöglichen - Eine
Storage<T>-Klasse, dieIterable<T>erweitert und über die folgenden Funktionen verfügt:- Eine private Liste, um Elemente intern zu halten
- Eine
add(T item)-Methode, um ein neues Element zu speichern - Eine
getAt(int index)-Methode, die das Element am angegebenen Index zurückgibt - Ein
count-Getter, der die Anzahl der gespeicherten Elemente zurückgibt - Ein
iterator-Getter, der einenStorageIteratorfür die gespeicherten Elemente zurückgibt
- Eine
main.dart: Importieren Sie Ihre Storage-Datei und demonstrieren Sie den generischen Speicher mit verschiedenen Typen:- Erstellen Sie ein
Storage<String>und fügen Sie drei Städtenamen hinzu:'Paris','Tokyo','Sydney' - Geben Sie die Anzahl der Elemente aus
- Geben Sie das Element an Index 1 aus
- Verwenden Sie eine
for-in-Schleife, um jede Stadt in einer eigenen Zeile auszugeben - Geben Sie eine Leerzeile aus
- Erstellen Sie ein
Storage<int>und fügen Sie vier Zahlen hinzu:100,200,300,400 - Verwenden Sie die
where-Methode, um Werte größer als 150 zu filtern, und geben Sie dann die resultierende Liste aus
- Erstellen Sie ein
Ihr Speichersystem sollte nahtlos mit jedem Typ funktionieren und dabei die volle Typsicherheit gewährleisten. Da es Iterable erweitert, erhält es automatisch Zugriff auf leistungsstarke Methoden wie where, map und fold!
Erwartete Ausgabe:
Count: 3
Item at 1: Tokyo
Paris
Tokyo
Sydney
[200, 300, 400]Probier es selbst
import 'storage.dart';
void main() {
// TODO: Erstelle einen Storage<String> für Städte
// Füge drei Städte hinzu: 'Paris', 'Tokyo', 'Sydney'
// TODO: Gib die Anzahl der Elemente aus (Format: "Count: X")
// TODO: Gib das Element an Index 1 aus (Format: "Item at 1: X")
// TODO: Verwende eine for-in-Schleife, um jede Stadt in einer eigenen Zeile auszugeben
// TODO: Gib eine Leerzeile aus
print('');
// TODO: Erstelle einen Storage<int> für Zahlen
// Füge vier Zahlen hinzu: 100, 200, 300, 400
// TODO: Verwende die where-Methode, um Werte größer als 150 zu filtern
// Gib dann die resultierende Liste mit toList() aus
}
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienBibliotheken & ImportsEinführung in die OOPKlassen vs. ObjekteDas this-SchlüsselwortMethodenInstanzvariablenKonstruktor-GrundlagenWiederholung – Einfacher Taschenrechner4Null-Sicherheit
Einführung in Null-SicherheitNullable vs. Non-NullableDie ? und ! OperatorenLate-Schlüsselwort & Null-SicherheitNull-aware OperatorenNull-Sicherheit in KlassenZusammenfassung – Benutzerprofil-System7Abstrakte Klassen & Interfaces
Abstrakte KlassenAbstrakte MethodenInterfaces in DartImplizite InterfacesImplementieren vs. ErweiternMehrfache InterfacesRückblick – Shape Calculator10Collections & Generics
Überblick über List, Set und MapTypsichere CollectionsGenerische KlassenGenerische MethodenGenerische ConstraintsIterable & IteratorZusammenfassung – Generische Speicherung13Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungExtension MethodsCallable ClassesSealed Classes (Dart 3)Records (Dart 3)Patterns & Matching (3.0)Enums mit Methoden16Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen2Konstruktoren in Dart
Standard-KonstruktorBenannte KonstruktorenInitialisierungslistenKonstante KonstruktorenFactory-KonstruktorenWeiterleitende KonstruktorenZusammenfassung – Shape Builder5Kapselung
Öffentliche vs. private MemberDie _ Präfix-KonventionSichtbarkeit auf Library-EbeneGetter & Setter im DetailInformation HidingRückblick – Schülerdatensätze8Mixins
Einführung in MixinsMixins erstellenMehrere Mixins verwendenDas on-Schlüsselwort in MixinsMixin vs. VererbungMixin vs. InterfaceZusammenfassung - Tiersystem11Spezielle Methoden
toString() überschreibenhashCode & == überschreibenComparable-Interfacecall()-MethodenoSuchMethod überschreibenZusammenfassung – Eigene Collection14Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster3Klasseneigenschaften
Instanz- vs. statische MemberFinal & Const FelderLate-VariablenStatische Methoden & FelderGetter und SetterZusammenfassung – Bankkonto-Manager6Vererbung
Grundlagen der VererbungDas super-SchlüsselwortMethoden überschreibenDie @override-AnnotationDas final-Klassen-SchlüsselwortKonstruktoren & VererbungRückblick – Mitarbeiter-Hierarchie9Polymorphismus
Polymorphismus-GrundlagenPolymorphismus über InterfacesTypprüfung zur LaufzeitDie is & as OperatorenDas covariant SchlüsselwortZusammenfassung – Payment Processor