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 RepositoryEntraînez-vous par vous-même : Compilateur Dart en ligne