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
1Fondamentaux de la POO
Fichiers externesBibliothèques et importsIntroduction à la POOClasses vs objetsLe mot-clé thisMéthodesVariables d’instanceBases des constructeursRécapitulatif - Calculatrice simple4Sécurité face aux valeurs nulles
Introduction à la sécurité face aux valeurs nullesNullable vs Non-NullableLes opérateurs ? et !Mot-clé Late et sécurité face aux valeurs nullesOpérateurs sensibles à nullSécurité face aux valeurs nulles dans les classesRécapitulatif – Système de profil utilisateur7Classes abstraites et interfaces
Classes abstraitesMéthodes abstraitesInterfaces en DartInterfaces implicitesImplémenter ou étendreInterfaces multiplesRécapitulatif - Calculateur de formes10Collections et génériques
Vue d’ensemble des List, Set et MapCollections à typage sûrClasses génériquesMéthodes génériquesContraintes génériquesIterable et IteratorRécapitulatif – stockage générique2Constructeurs en Dart
Constructeur par défautConstructeurs nommésListes d'initialisationConstructeurs constantsConstructeurs factoryConstructeurs redirigésRécapitulatif - Constructeur de formes5Encapsulation
Membres publics vs privésLa convention du préfixe _Confidentialité au niveau de la bibliothèqueApprofondissement des getters et settersMasquage de l’informationRécapitulatif - Fiches des étudiants8Mixins
Introduction aux MixinsCréer des MixinsUtiliser plusieurs MixinsMot-clé on dans les MixinsMixin ou héritageMixin ou interfaceRécapitulatif - Système animal11Méthodes spéciales
Redéfinition de toString()Redéfinition de hashCode et ==Interface ComparableMéthode call()Redéfinition de noSuchMethodRécapitulatif - Collection personnalisée14Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron Strategy3Propriétés des classes
Membres d’instance et statiquesChamps Final et ConstVariables différéesMéthodes et champs statiquesAccesseurs et mutateursRécapitulatif - Gestionnaire de compte bancaire6Héritage
Héritage de baseLe mot-clé superRedéfinition de méthodeL’annotation @overrideLe mot-clé de classe finalConstructeurs et héritageRécapitulatif – Hiérarchie des employés9Polymorphisme
Bases du polymorphismePolymorphisme via les interfacesVérification des types à l’exécutionLes opérateurs is et asMot-clé covariantRécapitulatif - Processeur de paiements12POO asynchrone
Futures et async/awaitNotions de base des StreamsContrôleurs de StreamsConstructeurs asynchronesAsynchrone dans les méthodes de classeRécapitulatif - récupérateur de données15Patrons de conception – Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron CompositePatron DépôtEntraînez-vous par vous-même : Compilateur Dart en ligne