Interface d'administration
Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy — leçon 105 sur 110.
Défi
FacileDans la leçon précédente, vous avez ajouté une fonctionnalité de recherche à votre classe Library. Créons maintenant une interface d'administration qui permet aux utilisateurs privilégiés de gérer l'inventaire de la bibliothèque - en ajoutant de nouveaux livres et en supprimant ceux qui existent déjà.
Vous allez introduire une nouvelle classe Admin et enrichir votre Library avec des capacités administratives :
book.dart: Conservez votre classeBookexistante sans modification.user.dart: Conservez votre classeUserexistante sans modification.admin.dart: Créez une nouvelle classeAdminqui représente les administrateurs de la bibliothèque. Un administrateur possède unid(String) et unname(String). SurchargeztoString()pour retournerAdmin [id]: name.library.dart: Ajoutez des fonctionnalités administratives à votre classeLibrary:- Ajoutez une liste pour stocker les administrateurs enregistrés
registerAdmin(Admin admin)- ajoute un administrateur à la bibliothèqueaddBookAsAdmin(String adminId, Book book)- si l'administrateur existe, ajoute le livre et afficheadminId added "title". Si l'administrateur n'existe pas, afficheUnauthorized.removeBook(String adminId, String isbn)- si l'administrateur existe et que le livre existe, retire le livre de la bibliothèque et afficheadminId removed "title". Si l'administrateur n'existe pas, afficheUnauthorized. Si le livre n'existe pas, afficheBook not found.getBookCount()- retourne le nombre total de livres dans la bibliothèque
main.dart: Démontrez l'interface d'administration. Créez uneLibraryet enregistrez un administrateur (A001,Sarah Admin). Utilisez l'administrateur pour ajouter trois livres :978-0-13-468599-1,The Pragmatic Programmer,David Thomas978-0-596-51774-8,JavaScript: The Good Parts,Douglas Crockford978-0-13-235088-4,Clean Code,Robert Martin
Total books: X. Essayez ensuite d'ajouter un livre avec un identifiant d'administrateur non enregistréA999. Supprimez le deuxième livre en utilisant l'administrateur enregistré. Affichez le nombre final de livres.
Sortie attendue :
A001 added "The Pragmatic Programmer"
A001 added "JavaScript: The Good Parts"
A001 added "Clean Code"
Total books: 3
Unauthorized
A001 removed "JavaScript: The Good Parts"
Total books: 2Essayez vous-même
import 'book.dart';
import 'user.dart';
import 'library.dart';
import 'admin.dart';
void main() {
// TODO: Créer une Library
// TODO: Créer et enregistrer un admin (A001, Sarah Admin)
// TODO: Utiliser l'admin pour ajouter trois livres :
// - 978-0-13-468599-1, The Pragmatic Programmer, David Thomas
// - 978-0-596-51774-8, JavaScript: The Good Parts, Douglas Crockford
// - 978-0-13-235088-4, Clean Code, Robert Martin
// TODO: Afficher le nombre de livres sous la forme "Total books: X"
// TODO: Essayer d'ajouter un livre avec un id d'admin non enregistré A999
// TODO: Supprimer le deuxième livre (978-0-596-51774-8) en utilisant l'admin enregistré
// TODO: Afficher le nombre final de livres
}
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érique13Concepts avancés de la POO
Composition vs HéritageMéthodes d'extensionClasses appelablesClasses scellées (Dart 3)Records (Dart 3)Patterns et Matching (3.0)Enums avec méthodes16Projet : Gestion de bibliothèque
Présentation du projetClasses Livre et Utilisateur2Les 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