Récapitulatif - Stockage générique
Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy — leçon 69 sur 110.
Défi
FacileConstruisons un système de stockage générique qui combine tout ce que vous avez appris sur les collections et les génériques ! Vous allez créer une classe Storage<T> capable de stocker des éléments de n'importe quel type, de les récupérer et d'être parcourue à l'aide d'une boucle for-in.
Vous organiserez votre code dans deux fichiers :
storage.dart: Créez votre système de stockage générique avec deux classes :- Une classe
StorageIterator<T>qui implémenteIterator<T>pour permettre l'itération sur les éléments stockés - Une classe
Storage<T>qui étendIterable<T>avec les capacités suivantes :- Une liste privée pour contenir les éléments en interne
- Une méthode
add(T item)pour stocker un nouvel élément - Une méthode
getAt(int index)qui retourne l'élément à l'index donné - Un getter
countqui retourne le nombre d'éléments stockés - Un getter
iteratorqui retourne unStorageIteratorpour les éléments stockés
- Une classe
main.dart: Importez votre fichier de stockage et démontrez le stockage générique avec différents types :- Créez un
Storage<String>et ajoutez trois noms de villes :'Paris','Tokyo','Sydney' - Affichez le nombre d'éléments (count)
- Affichez l'élément à l'index 1
- Utilisez une boucle
for-inpour afficher chaque ville sur sa propre ligne - Affichez une ligne vide
- Créez un
Storage<int>et ajoutez quatre nombres :100,200,300,400 - Utilisez la méthode
wherepour filtrer les valeurs supérieures à 150, puis affichez la liste résultante
- Créez un
Votre système de stockage doit fonctionner parfaitement avec n'importe quel type tout en maintenant une sécurité de type complète. Parce qu'il étend Iterable, il accède automatiquement à des méthodes puissantes comme where, map et fold !
Sortie attendue :
Count: 3
Item at 1: Tokyo
Paris
Tokyo
Sydney
[200, 300, 400]Essayez vous-même
import 'storage.dart';
void main() {
// TODO: Créer un Storage<String> pour les villes
// Ajouter trois villes : 'Paris', 'Tokyo', 'Sydney'
// TODO: Afficher le nombre d'éléments (format : "Count: X")
// TODO: Afficher l'élément à l'index 1 (format : "Item at 1: X")
// TODO: Utiliser une boucle for-in pour afficher chaque ville sur sa propre ligne
// TODO: Afficher une ligne vide
print('');
// TODO: Créer un Storage<int> pour les nombres
// Ajouter quatre nombres : 100, 200, 300, 400
// TODO: Utiliser la méthode where pour filtrer les valeurs supérieures à 150
// Ensuite, afficher la liste résultante en utilisant toList()
}
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