Riepilogo - Collezione personalizzata
Fa parte della sezione Programmazione orientata agli oggetti del percorso Dart di Coddy. Lezione 75 di 110.
Sfida
FacileCostruiamo un sistema ScoreBoard che tiene traccia dei punteggi dei giocatori e mostra come i metodi speciali collaborano per creare una classe rifinita e professionale!
Organizzerai il codice in due file:
score_board.dart: crea una classePlayere una classeScoreBoardche collaborano per gestire i punteggi del gioco.La tua classe
Playerdovrebbe avere unname(String) e unoscore(int). Deve:- Implementare
Comparable<Player>in modo che i giocatori possano essere ordinati per punteggio in ordine decrescente (dal più alto al più basso) - Sovrascrivere
==ehashCodeaffinché due giocatori con lo stesso nome siano considerati uguali (indipendentemente dal punteggio) - Sovrascrivere
toString()affinché restituisca:[name]: [score] points
La tua classe
ScoreBoarddovrebbe memorizzare un elenco di giocatori e fornire:- Un metodo
addPlayer(Player player)che aggiunge un giocatore solo se non esiste già (usa la tua implementazione dell'uguaglianza!) - Un metodo
call()che non accetta argomenti e restituisce una copia ordinata dell'elenco dei giocatori (ordinata per punteggio, dal più alto al più basso) - Sovrascrivere
toString()per visualizzare tutti i giocatori (non ordinati), uno per riga, con l'intestazioneScoreBoard:sulla prima riga
- Implementare
main.dart: importa il file del tabellone dei punteggi e mostra come collaborano tutti questi metodi speciali:- Crea un
ScoreBoard - Aggiungi questi giocatori:
Alicecon150,Bobcon200,Charliecon175 - Prova ad aggiungere di nuovo
Alicecon il punteggio999(dovrebbe essere rifiutata perché è un duplicato) - Stampa il tabellone dei punteggi usando il suo
toString() - Stampa una riga vuota
- Stampa
Rankings: - Richiama il tabellone dei punteggi come una funzione per ottenere la classifica ordinata, poi stampa ogni giocatore
- Crea un
Questa sfida riunisce toString() per la visualizzazione, == e hashCode per rilevare i duplicati, compareTo() per l'ordinamento e call() per un'interfaccia richiamabile semplice e intuitiva!
Risultato atteso:
ScoreBoard:
Alice: 150 points
Bob: 200 points
Charlie: 175 points
Rankings:
Bob: 200 points
Charlie: 175 points
Alice: 150 pointsProvalo tu
import 'score_board.dart';
void main() {
// TODO: Crea un ScoreBoard
// TODO: Aggiungi i giocatori: Alice (150), Bob (200), Charlie (175)
// TODO: Prova ad aggiungere di nuovo Alice con un punteggio di 999 (dovrebbe essere rifiutata perché già presente)
// TODO: Stampa la classifica usando il suo metodo toString()
// TODO: Stampa una riga vuota
// TODO: Stampa "Rankings:"
// TODO: Chiama la classifica come una funzione per ottenere le posizioni ordinate, poi stampa ogni giocatore
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniLibrerie e importazioniIntroduzione alla programmazione orientata agli oggettiClassi e oggettiLa parola chiave thisMetodiVariabili di istanzaFondamenti dei costruttoriRiepilogo - Calcolatrice semplice4Sicurezza dei valori null
Introduzione alla sicurezza dei valori nullNullable e non nullableGli operatori ? e !La keyword late e la sicurezza dei valori nullOperatori null-awareSicurezza dei valori null nelle classiRiepilogo - Sistema di profili utente7Classi astratte e interfacce
Classi astratteMetodi astrattiInterfacce in DartInterfacce impliciteImplementare vs estendereInterfacce multipleRiepilogo - Calcolatore di forme10Collezioni e generici
Panoramica di List, Set e MapCollezioni sicure rispetto ai tipiClassi genericheMetodi genericiVincoli sui genericiIterable e IteratorRiepilogo - Archiviazione generica13Concetti avanzati di OOP
Composizione vs ereditarietàMetodi di estensioneClassi chiamabiliClassi sealed (Dart 3)Record (Dart 3)Pattern e matching (3.0)Enum con metodi16Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente2I costruttori in Dart
Costruttore predefinitoCostruttori con nomeListe di inizializzazioneCostruttori costantiCostruttori factoryCostruttori di reindirizzamentoRiepilogo - Crea forme5Incapsulamento
Membri pubblici e privatiConvenzione del prefisso _Visibilità a livello di libreriaApprofondimento su getter e setterNascondimento delle informazioniRiepilogo - Registri degli studenti8Mixin
Introduzione ai MixinCreare MixinUsare più MixinParola chiave on nei MixinMixin vs ereditarietàMixin vs interfacciaRiepilogo - Sistema animale11Metodi speciali
Sovrascrittura di toString()Sovrascrittura di hashCode e ==Interfaccia ComparableMetodo call()Sovrascrittura di noSuchMethodRiepilogo - Collezione personalizzata14Modelli di progettazione Parte 1
Introduzione ai modelli di progettazioneSingletonFactoryObserverStrategy3Proprietà delle classi
Membri di istanza e staticiCampi final e constVariabili lateMetodi e campi staticiGetter e setterRiepilogo - Gestore di conti bancari6Ereditarietà
Ereditarietà di baseLa parola chiave superOverride dei metodiL’annotazione @overrideLa parola chiave final per le classiCostruttori ed ereditarietàRiepilogo - Gerarchia dei dipendenti9Polimorfismo
Fondamenti di polimorfismoPolimorfismo tramite interfacceControllo del tipo a runtimeGli operatori is e asParola chiave covariantRiepilogo - Elaboratore di pagamenti12OOP asincrona
Future e async/awaitNozioni di base sugli streamController degli streamCostruttori asincroniAsync nei metodi di classeRiepilogo - Recupero dei dati15Pattern di progettazione Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositePattern RepositoryEsercitati da solo: Compilatore Dart online