Zusammenfassung – Eigene Collection
Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy — Lektion 75 von 110.
Aufgabe
EinfachLassen Sie uns ein ScoreBoard-System bauen, das Spielerstände verfolgt und demonstriert, wie spezielle Methoden zusammenarbeiten, um eine ausgefeilte, professionelle Klasse zu erstellen!
Sie werden Ihren Code in zwei Dateien organisieren:
score_board.dart: Erstellen Sie einePlayer-Klasse und eineScoreBoard-Klasse, die zusammenarbeiten, um Spielergebnisse zu verwalten.Ihre
Player-Klasse sollte einenname(String) und einenscore(int) haben. Sie muss:Comparable<Player>implementieren, damit Spieler nach Punktzahl in absteigender Reihenfolge (höchste zuerst) sortiert werden können==undhashCodeüberschreiben, damit zwei Spieler mit demselben Namen als gleich betrachtet werden (unabhängig von der Punktzahl)toString()überschreiben, um Folgendes zurückzugeben:[name]: [score] points
Ihre
ScoreBoard-Klasse sollte eine Liste von Spielern speichern und Folgendes bieten:- Eine
addPlayer(Player player)-Methode, die einen Spieler nur hinzufügt, wenn er noch nicht existiert (nutzen Sie Ihre Gleichheitsimplementierung!) - Eine
call()-Methode, die keine Argumente entgegennimmt und eine sortierte Kopie der Spielerliste zurückgibt (sortiert nach Punktzahl, höchste zuerst) toString()überschreiben, um alle Spieler (unsortiert) anzuzeigen, einen pro Zeile, mit der KopfzeileScoreBoard:in der ersten Zeile
main.dart: Importieren Sie Ihre Scoreboard-Datei und demonstrieren Sie, wie all diese speziellen Methoden zusammenarbeiten:- Erstellen Sie ein
ScoreBoard - Fügen Sie diese Spieler hinzu:
Alicemit150,Bobmit200,Charliemit175 - Versuchen Sie,
Aliceerneut mit der Punktzahl999hinzuzufügen (dies sollte als Duplikat abgelehnt werden) - Geben Sie das Scoreboard mit seiner
toString()-Methode aus - Geben Sie eine Leerzeile aus
- Geben Sie
Rankings:aus - Rufen Sie das Scoreboard wie eine Funktion auf, um sortierte Ranglisten zu erhalten, und geben Sie dann jeden Spieler aus
- Erstellen Sie ein
Diese Herausforderung führt toString() für die Anzeige, == und hashCode für die Duplikaterkennung, compareTo() für die Sortierung und call() für eine saubere aufrufbare Schnittstelle zusammen!
Erwartete Ausgabe:
ScoreBoard:
Alice: 150 points
Bob: 200 points
Charlie: 175 points
Rankings:
Bob: 200 points
Charlie: 175 points
Alice: 150 pointsProbier es selbst
import 'score_board.dart';
void main() {
// TODO: Erstelle ein ScoreBoard
// TODO: Füge Spieler hinzu: Alice (150), Bob (200), Charlie (175)
// TODO: Versuche Alice erneut mit der Punktzahl 999 hinzuzufügen (sollte als Duplikat abgelehnt werden)
// TODO: Gib das Scoreboard mit seiner toString() Methode aus
// TODO: Gib eine Leerzeile aus
// TODO: Gib "Rankings:" aus
// TODO: Rufe das Scoreboard wie eine Funktion auf, um sortierte Rankings zu erhalten, und gib dann jeden Spieler 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