Wiederholung – Benutzerdefinierte Collection
Teil des Abschnitts Objektorientierte Programmierung der Dart-Journey von Coddy. Lektion 75 von 110.
Aufgabe
EinfachLass uns ein ScoreBoard-System erstellen, das Spielerst Punktzahlen verfolgt und zeigt, wie spezielle Methoden zusammenarbeiten, um eine ausgefeilte, professionelle Klasse zu erstellen!
Du organisierst deinen Code in zwei Dateien:
score_board.dart: Erstelle einePlayer-Klasse und eineScoreBoard-Klasse, die zusammenarbeiten, um Spielpunktzahlen zu verwalten.Deine
Player-Klasse sollte über einenname(String) und einenscore(int) verfügen. Sie muss:Comparable<Player>implementieren, damit Spieler nach Punktzahl in absteigender Reihenfolge sortiert werden können (höchste zuerst)==undhashCodeüberschreiben, sodass zwei Spieler mit demselben Namen als gleich gelten (unabhängig von der Punktzahl)toString()überschreiben, sodass[name]: [score] pointszurückgegeben wird
Deine
ScoreBoard-Klasse sollte eine Liste von Spielern speichern und Folgendes bereitstellen:- Eine
addPlayer(Player player)-Methode, die einen Spieler nur hinzufügt, wenn er noch nicht existiert (verwende deine 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), einen pro Zeile, mit dem HeaderScoreBoard:in der ersten Zeile anzuzeigen
main.dart: Importiere deine Scoreboard-Datei und zeige, wie all diese speziellen Methoden zusammenarbeiten:- Erstelle ein
ScoreBoard - Füge diese Spieler hinzu:
Alicemit150,Bobmit200,Charliemit175 - Versuche,
Aliceerneut mit der Punktzahl999hinzuzufügen (sie sollte als Duplikat abgelehnt werden) - Gib das Scoreboard mit seinem
toString()aus - Gib eine leere Zeile aus
- Gib
Rankings:aus - Rufe das Scoreboard wie eine Funktion auf, um sortierte Ranglisten zu erhalten, und gib anschließend jeden Spieler aus
- Erstelle ein
Diese Herausforderung verbindet toString() für die Anzeige, == und hashCode zur Erkennung von Duplikaten, compareTo() zum Sortieren und call() für eine übersichtliche aufrufbare Schnittstelle!
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 Schlüsselwort thisMethodenInstanzvariablenGrundlagen von KonstruktorenRückblick – Einfacher Taschenrechner4Null-Sicherheit
Einführung in die Null-SicherheitNullable vs. Non-NullableDie Operatoren ? und !Late-Schlüsselwort und Null-SicherheitNull-bewusste OperatorenNull-Sicherheit in KlassenRückblick – Benutzers профilsystem7Abstrakte Klassen & Interfaces
Abstrakte KlassenAbstrakte MethodenInterfaces in DartImplizite InterfacesImplementieren vs. ErweiternMehrere InterfacesZusammenfassung – Formrechner10Collections & Generics
Übersicht über List, Set und MapTypsichere CollectionsGenerische KlassenGenerische MethodenGenerische EinschränkungenIterable & IteratorRückblick – Generischer Speicher13Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungErweiterungsmethodenAufrufbare KlassenVersiegelte Klassen (Dart 3)Records (Dart 3)Muster & Matching (3.0)Enums mit Methoden16Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen2Konstruktoren in Dart
StandardkonstruktorBenannte KonstruktorenInitialisierungslistenKonstantenkonstruktorenFactory-KonstruktorenWeiterleitende KonstruktorenRückblick – Shape Builder5Kapselung
Öffentliche vs. private MemberDie _-Präfix-KonventionBibliotheksweite SichtbarkeitTiefergehende Getter & SetterInformationsverbergungRückblick – Studierendendaten8Mixins
Einführung in MixinsMixins erstellenMehrere Mixins verwendenDas Schlüsselwort „on“ in MixinsMixin vs. VererbungMixin vs. SchnittstelleRückblick – Tiersystem11Spezielle Methoden
toString()-ÜberschreibunghashCode- & ==-ÜberschreibungComparable-Schnittstellecall()-MethodenoSuchMethod-ÜberschreibungWiederholung – Benutzerdefinierte Collection14Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFabrikmusterBeobachtermusterStrategiemuster17Abschließende Herausforderungen
E-Learning-PlattformBankingsystemSpielcharaktersystemFahrzeugvermietung3Klassen-Eigenschaften
Instanz- vs. statische MemberFinal- und Const-FelderLate-VariablenStatische Methoden und FelderGetter und SetterRückblick – Bankkontoverwaltung6Vererbung
Grundlegende VererbungDas Schlüsselwort superMethodenüberschreibungDie Annotation @overrideDas Schlüsselwort final für KlassenKonstruktoren und VererbungZusammenfassung – Mitarbeiterhierarchie9Polymorphismus
Grundlagen des PolymorphismusPolymorphismus über InterfacesLaufzeit-TypüberprüfungDie Operatoren is & asCovariant-SchlüsselwortZusammenfassung – ZahlungsprozessorÜbe selbstständig: Online-Dart-Compiler