Système d'emprunt
Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy — leçon 103 sur 110.
Défi
FacileDans la leçon précédente, vous avez créé les classes Book et User avec des propriétés de base. Il est maintenant temps de construire un véritable système d'emprunt avec une classe Library qui gère l'ensemble du processus d'emprunt.
Vous allez créer un nouveau fichier et mettre à jour vos fichiers existants pour implémenter la logique d'emprunt :
book.dart: Conservez votre classeBookexistante avecisbn,title,author,isAvailableettoString().user.dart: Conservez votre classeUserexistante avecid,name,borrowedBooksettoString().library.dart: Créez une nouvelle classeLibraryqui gère les livres et les utilisateurs. Elle doit avoir deux listes : une pourbookset une pourusers. Incluez des méthodes pour :addBook(Book book)- ajoute un livre à la collection de la bibliothèqueregisterUser(User user)- ajoute un utilisateur à la bibliothèqueborrowBook(String isbn, String userId)- trouve le livre et l'utilisateur, puis si le livre existe, est disponible, et que l'utilisateur existe, marque le livre comme indisponible, l'ajoute aux livres empruntés par l'utilisateur, et afficheuserId borrowed "title". Si le livre n'existe pas, afficheBook not found. Si le livre n'est pas disponible, afficheBook not available. Si l'utilisateur n'existe pas, afficheUser not found.returnBook(String isbn, String userId)- trouve le livre et l'utilisateur, puis si les deux existent et que l'utilisateur possède ce livre, marque le livre comme disponible, le retire des livres empruntés par l'utilisateur, et afficheuserId returned "title". Si le livre n'existe pas, afficheBook not found. Si l'utilisateur n'existe pas, afficheUser not found.
main.dart: Importez tous vos fichiers et faites une démonstration du système d'emprunt. Créez uneLibrary, ajoutez deux livres (978-0-13-468599-1,The Pragmatic Programmer,David Thomaset978-0-596-51774-8,JavaScript: The Good Parts,Douglas Crockford), et enregistrez un utilisateur (U001,Alice Johnson). Ensuite :- Empruntez le premier livre pour Alice
- Essayez d'emprunter à nouveau le même livre (cela devrait échouer)
- Empruntez le deuxième livre pour Alice
- Affichez Alice pour montrer son nombre de livres empruntés
- Rendez le premier livre
- Affichez à nouveau Alice pour montrer le nombre mis à jour
Résultat attendu :
U001 borrowed "The Pragmatic Programmer"
Book not available
U001 borrowed "JavaScript: The Good Parts"
User U001: Alice Johnson (2 books borrowed)
U001 returned "The Pragmatic Programmer"
User U001: Alice Johnson (1 books borrowed)Essayez vous-même
import 'book.dart';
import 'user.dart';
import 'library.dart';
void main() {
// TODO: Créer une instance de Library
// TODO: Créer deux livres :
// - Livre 1 : isbn '978-0-13-468599-1', title 'The Pragmatic Programmer', author 'David Thomas'
// - Livre 2 : isbn '978-0-596-51774-8', title 'JavaScript: The Good Parts', author 'Douglas Crockford'
// TODO: Ajouter les deux livres à la bibliothèque
// TODO: Créer un utilisateur avec l'id 'U001' et le name 'Alice Johnson'
// TODO: Enregistrer l'utilisateur auprès de la bibliothèque
// TODO: Emprunter le premier livre pour Alice
// TODO: Essayer d'emprunter à nouveau le même livre (devrait échouer avec 'Book not available')
// TODO: Emprunter le deuxième livre pour Alice
// TODO: Afficher Alice pour montrer son nombre d'emprunts
// TODO: Retourner le premier livre
// TODO: Afficher à nouveau Alice pour montrer le nombre mis à jour
}
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