Interface administrateur
Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy — leçon 81 sur 87.
Défi
FacileDéveloppons votre système de gestion de bibliothèque avec une interface d'administration ! Une véritable bibliothèque a besoin de capacités administratives : ajouter de nouveaux livres à la collection, supprimer les ouvrages obsolètes et enregistrer de nouveaux membres. Vous allez créer une interface qui définit ces opérations administratives et les implémenter dans une classe d'administration dédiée.
Vous continuerez à construire sur votre code existant à travers cinq fichiers :
Book.java: Conservez votre classe Book avec toutes les fonctionnalités existantes — isbn, title, author, isAvailable, borrowedBy, getDetails(), et les getters/setters appropriés.User.java: Conservez votre classe User inchangée avec id, name, l'ArrayList borrowedBooks, borrowBook(), returnBook(), getBorrowedCount(), et toString().Library.java: Conservez votre classe Library avec toutes les méthodes existantes. Ajoutez une nouvelle méthoderemoveBook(String isbn)qui trouve et supprime un livre de la collection par son ISBN. La méthode doit retournertruesi le livre a été trouvé et supprimé, sinonfalse. Un livre ne peut être supprimé que s'il est actuellement disponible (non emprunté).LibraryAdmin.java: Créez une interface appeléeLibraryAdminqui définit le contrat pour les opérations administratives. Votre interface doit déclarer trois méthodes :addBook(String isbn, String title, String author)- retourne un booléen indiquant le succèsremoveBook(String isbn)- retourne un booléen indiquant le succèsregisterUser(String id, String name)- retourne un booléen indiquant le succès
Ensuite, créez une classe appelée
AdminServicequi implémente cette interface. Le AdminService doit détenir une référence à une Library (passée via son constructeur) et implémenter les trois méthodes en déléguant à la Library tout en ajoutant un retour approprié. Lors de l'ajout d'un livre, créez un nouveau Book et ajoutez-le à la bibliothèque. Lors de l'enregistrement d'un utilisateur, créez un nouveau User et enregistrez-le.Main.java: Démontrez votre système d'administration ! Vous recevrez une série de commandes d'administration sous la forme d'une seule chaîne de caractères séparée par des virgules. Chaque commande suit l'un de ces formats :ADD_BOOK:isbn:title:authorREMOVE_BOOK:isbnREGISTER_USER:id:nameBORROW:userId:isbn
Créez une Library et un AdminService. Traitez chaque commande et affichez le résultat :
- Pour ADD_BOOK : affichez
Added: [title]en cas de succès - Pour REMOVE_BOOK : affichez
Removed: [isbn]en cas de succès, ouCannot remove: [isbn]si le livre n'existe pas ou est emprunté - Pour REGISTER_USER : affichez
Registered: [name] - Pour BORROW : utilisez la fonctionnalité d'emprunt de la bibliothèque existante
Après avoir traité toutes les commandes, affichez
Library status:suivi des détails de chaque livre et de son statut de disponibilité au format[details] - [Available/Borrowed].
Vous recevrez une entrée : une chaîne de commandes séparées par des virgules.
Par exemple, avec l'entrée REGISTER_USER:U001:Alice,ADD_BOOK:ISBN-001:Clean Code:Robert Martin,ADD_BOOK:ISBN-002:Design Patterns:Gang of Four,BORROW:U001:ISBN-001,REMOVE_BOOK:ISBN-001,REMOVE_BOOK:ISBN-002, votre sortie serait :
Registered: Alice
Added: Clean Code
Added: Design Patterns
Alice borrowed Clean Code
Cannot remove: ISBN-001
Removed: ISBN-002
Library status:
[ISBN-001] Clean Code by Robert Martin - BorrowedRemarquez comment l'interface d'administration fournit un contrat clair pour les opérations administratives, tandis que l'implémentation AdminService gère la logique réelle. Le système empêche correctement la suppression d'un livre emprunté tout en permettant la suppression de ceux qui sont disponibles. Cette séparation de l'interface et de l'implémentation est un principe clé de la POO qui rend votre code plus facile à maintenir et à tester !
Essayez vous-même
import java.util.Scanner;
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Lire les commandes séparées par des virgules
String input = scanner.nextLine();
String[] commands = input.split(",");
// Créer Library et AdminService
Library library = new Library();
AdminService adminService = new AdminService(library);
// Traiter chaque commande
for (String command : commands) {
String[] parts = command.split(":");
String operation = parts[0];
if (operation.equals("ADD_BOOK")) {
String isbn = parts[1];
String title = parts[2];
String author = parts[3];
if (adminService.addBook(isbn, title, author)) {
System.out.println("Added: " + title);
}
} else if (operation.equals("REMOVE_BOOK")) {
String isbn = parts[1];
if (adminService.removeBook(isbn)) {
System.out.println("Removed: " + isbn);
} else {
System.out.println("Cannot remove: " + isbn);
}
} else if (operation.equals("REGISTER_USER")) {
String id = parts[1];
String name = parts[2];
if (adminService.registerUser(id, name)) {
System.out.println("Registered: " + name);
}
} else if (operation.equals("BORROW")) {
String userId = parts[1];
String isbn = parts[2];
library.borrowBook(userId, isbn);
}
}
// Afficher le statut de la bibliothèque
System.out.println("Library status:");
ArrayList<Book> allBooks = library.getAllBooks();
for (Book book : allBooks) {
String status = book.isAvailable() ? "Available" : "Borrowed";
System.out.println(book.getDetails() + " - " + status);
}
}
}
Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe mot-clé thisMéthodesChamps (Attributs)Méthode constructeurSurcharge de constructeurRécapitulatif - Calculatrice simple4Héritage
Héritage de base (extends)Le mot-clé superRedéfinition de méthode (@Override)Chaînage de constructeursLa classe ObjectHéritage simple et multiniveauPourquoi pas d'héritage multiple de classesRécapitulatif - Hiérarchie des employés7Méthodes spéciales et classe Object
Méthode toString()equals() et hashCode()Méthode clone()compareTo() et ComparableInterface ComparatorRécapitulatif - Tri personnalisé10Gestion des exceptions en POO
Hiérarchie des classes d'exceptionExceptions personnaliséesErreurs Checked vs UncheckedPattern Try-with-resourcesRécapitulatif - Utilisateur validé13Projet : Gestion de bibliothèque
Présentation du projet et conception UMLClasses Livre et Utilisateur2Modificateurs d'accès et Encapsulation
Aperçu des niveaux d'accèsMéthodes Getter et SetterMasquage d'informationsLe mot-clé finalRécapitulatif - Gestionnaire de compte bancaire5Polymorphisme
Bases de la surcharge de méthodesRedéfinition de méthodes (Run-Time)Upcasting et DowncastingL'opérateur instanceofClasses et méthodes abstraitesRécapitulatif - Calculateur de formes8Concepts avancés de la POO
Composition vs HéritageAgrégation vs CompositionClasses internes, imbriquées et anonymesEnums et méthodes d'EnumRecords (Java 16+)Classes scellées (Java 17+)11Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron MonteurPatron ObservateurPatron Stratégie3Propriétés de classe et membres statiques
Variables d'instance vs variables statiquesMéthodes statiquesBlocs statiquesConstantes (static final)Récapitulatif - Compteur et utilitaire6Interfaces et Classes Abstraites
Introduction aux InterfacesImplémentation d'InterfacesImplémentation d'Interfaces MultiplesDefault et Static dans les InterfacesClasses Abstraites vs InterfacesInterfaces FonctionnellesRécapitulatif - Système de Paiement9La généricité
Introduction à la généricitéClasses génériquesMéthodes génériquesParamètres de type bornésWildcards (?, extends, super)Récapitulatif - Conteneur générique12Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Template MethodPatron ÉtatPatron CompositePatron Itérateur