Récapitulatif - Collection personnalisée
Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy — leçon 75 sur 110.
Défi
FacileConstruisons un système ScoreBoard qui suit les scores des joueurs et démontre comment les méthodes spéciales fonctionnent ensemble pour créer une classe soignée et professionnelle !
Vous organiserez votre code en deux fichiers :
score_board.dart: Créez une classePlayeret une classeScoreBoardqui travaillent ensemble pour gérer les scores de jeu.Votre classe
Playerdoit avoir unname(String) et unscore(int). Elle doit :- Implémenter
Comparable<Player>afin que les joueurs puissent être triés par score par ordre décroissant (le plus élevé en premier) - Surcharger
==ethashCodepour que deux joueurs ayant le même nom soient considérés comme égaux (quel que soit le score) - Surcharger
toString()pour retourner :[name]: [score] points
Votre classe
ScoreBoarddoit stocker une liste de joueurs et fournir :- Une méthode
addPlayer(Player player)qui ajoute un joueur uniquement s'il n'existe pas déjà (utilisez votre implémentation de l'égalité !) - Une méthode
call()qui ne prend aucun argument et retourne une copie triée de la liste des joueurs (triée par score, le plus élevé en premier) - Surcharger
toString()pour afficher tous les joueurs (non triés), un par ligne, avec l'en-têteScoreBoard:sur la première ligne
- Implémenter
main.dart: Importez votre fichier de tableau des scores et démontrez comment toutes ces méthodes spéciales fonctionnent ensemble :- Créez un
ScoreBoard - Ajoutez ces joueurs :
Aliceavec150,Bobavec200,Charlieavec175 - Essayez d'ajouter
Aliceà nouveau avec le score999(cela devrait être rejeté comme un doublon) - Affichez le tableau des scores en utilisant son
toString() - Affichez une ligne vide
- Affichez
Rankings: - Appelez le tableau des scores comme une fonction pour obtenir les classements triés, puis affichez chaque joueur
- Créez un
Ce défi rassemble toString() pour l'affichage, == et hashCode pour la détection des doublons, compareTo() pour le tri, et call() pour une interface appelable propre !
Sortie attendue :
ScoreBoard:
Alice: 150 points
Bob: 200 points
Charlie: 175 points
Rankings:
Bob: 200 points
Charlie: 175 points
Alice: 150 pointsEssayez vous-même
import 'score_board.dart';
void main() {
// TODO: Créer un ScoreBoard
// TODO: Ajouter les joueurs : Alice (150), Bob (200), Charlie (175)
// TODO: Essayer d'ajouter Alice à nouveau avec le score 999 (devrait être rejeté comme doublon)
// TODO: Afficher le tableau des scores en utilisant son toString()
// TODO: Afficher une ligne vide
// TODO: Afficher "Rankings:"
// TODO: Appeler le tableau des scores comme une fonction pour obtenir les classements triés, puis afficher chaque joueur
}
Toutes les leçons de Programmation Orientée Objet
1Les bases de la POO
Fichiers externesBibliothèques et importsIntroduction à la POOClasses vs ObjetsLe mot-clé thisMéthodesVariables d'instanceBases des constructeursRécapitulatif - Calculatrice simple4Null Safety
Introduction à la Null SafetyNullable vs Non-NullableLes opérateurs ? et !Le mot-clé late et la Null SafetyLes opérateurs Null-AwareLa Null Safety dans les classesRécapitulatif - Système de profil utilisateur7Classes abstraites et Interfaces
Classes abstraitesMéthodes abstraitesInterfaces en DartInterfaces implicitesImplémentation vs ExtensionInterfaces multiplesRécapitulatif - Calculateur de formes10Collections et Génériques
Aperçu des List, Set et MapCollections Type-SafeClasses génériquesMéthodes génériquesContraintes de généricitéIterable & IteratorRécapitulatif - Stockage générique2Les constructeurs en Dart
Constructeur par défautConstructeurs nommésListes d'initialisationConstructeurs constantsConstructeurs factoryConstructeurs de redirectionRécapitulatif - Shape Builder5Encapsulation
Membres publics vs privésLa convention du préfixe _Visibilité au niveau de la bibliothèqueApprofondissement des Getters & SettersMasquage d'informationsRécapitulatif - Dossiers d'étudiants8Mixins
Introduction aux MixinsCréation de MixinsUtilisation de plusieurs MixinsLe mot-clé on dans les MixinsMixin vs HéritageMixin vs InterfaceRécapitulatif - Système Animal11Méthodes spéciales
Redéfinition de toString()Redéfinition de hashCode & ==Interface ComparableMéthode call()Redéfinition de noSuchMethodRécapitulatif - Collection personnalisée14Patrons de conception Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron ObservateurPatron Stratégie3Propriétés de classe
Membres d'instance vs statiquesChamps Final & ConstVariables LateMéthodes et champs statiquesGetters et SettersRécapitulatif - Gestionnaire de compte bancaire6Héritage
Bases de l'héritageLe mot-clé superRedéfinition de méthodeL'annotation @overrideLe mot-clé final pour les classesConstructeurs et héritageRécapitulatif - Hiérarchie des employés9Polymorphisme
Bases du polymorphismePolymorphisme via les interfacesVérification de type à l'exécutionLes opérateurs is & asMot-clé covariantRécapitulatif - Processeur de paiement12POO Asynchrone
Futures & async/awaitBases des StreamsStream ControllersConstructeurs asynchronesL'asynchrone dans les méthodes de classeRécapitulatif - Data Fetcher15Patrons de conception Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode ModèlePatron ÉtatPatron CompositePatron Repository