Admin-Interface
Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy — Lektion 81 von 87.
Aufgabe
EinfachLassen Sie uns Ihr Bibliotheksverwaltungssystem um ein Admin-Interface erweitern! Eine echte Bibliothek benötigt administrative Funktionen – das Hinzufügen neuer Bücher zur Sammlung, das Entfernen veralteter Bücher und das Registrieren neuer Mitglieder. Sie werden ein Interface erstellen, das diese administrativen Operationen definiert, und diese in einer speziellen Admin-Klasse implementieren.
Sie werden die Arbeit an Ihrem bestehenden Code in fünf Dateien fortsetzen:
Book.java: Behalten Sie Ihre Book-Klasse mit allen vorhandenen Funktionen bei – isbn, title, author, isAvailable, borrowedBy, getDetails() und den entsprechenden Gettern/Settern.User.java: Behalten Sie Ihre User-Klasse unverändert bei mit id, name, der borrowedBooks ArrayList, borrowBook(), returnBook(), getBorrowedCount() und toString().Library.java: Behalten Sie Ihre Library-Klasse mit allen vorhandenen Methoden bei. Fügen Sie eine neue MethoderemoveBook(String isbn)hinzu, die ein Buch anhand seiner ISBN in der Sammlung findet und entfernt. Die Methode solltetruezurückgeben, wenn das Buch gefunden und entfernt wurde, andernfallsfalse. Ein Buch kann nur entfernt werden, wenn es derzeit verfügbar ist (nicht ausgeliehen).LibraryAdmin.java: Erstellen Sie ein Interface namensLibraryAdmin, das den Vertrag für administrative Operationen definiert. Ihr Interface sollte drei Methoden deklarieren:addBook(String isbn, String title, String author)- gibt einen booleschen Wert zurück, der den Erfolg anzeigtremoveBook(String isbn)- gibt einen booleschen Wert zurück, der den Erfolg anzeigtregisterUser(String id, String name)- gibt einen booleschen Wert zurück, der den Erfolg anzeigt
Erstellen Sie dann eine Klasse namens
AdminService, die dieses Interface implementiert. Der AdminService sollte eine Referenz auf eine Library halten (übergeben durch seinen Konstruktor) und alle drei Methoden implementieren, indem er an die Library delegiert und entsprechendes Feedback hinzufügt. Wenn ein Buch hinzugefügt wird, erstellen Sie ein neues Book und fügen Sie es der Bibliothek hinzu. Wenn ein Benutzer registriert wird, erstellen Sie einen neuen User und registrieren Sie ihn.Main.java: Demonstrieren Sie Ihr Admin-System! Sie erhalten eine Reihe von Admin-Befehlen als einen einzelnen, durch Kommas getrennten String. Jeder Befehl folgt einem dieser Formate:ADD_BOOK:isbn:title:authorREMOVE_BOOK:isbnREGISTER_USER:id:nameBORROW:userId:isbn
Erstellen Sie eine Library und einen AdminService. Verarbeiten Sie jeden Befehl und geben Sie das Ergebnis aus:
- Für ADD_BOOK: geben Sie
Added: [title]bei Erfolg aus - Für REMOVE_BOOK: geben Sie
Removed: [isbn]bei Erfolg aus, oderCannot remove: [isbn], wenn das Buch nicht existiert oder ausgeliehen ist - Für REGISTER_USER: geben Sie
Registered: [name]aus - Für BORROW: verwenden Sie die vorhandene Ausleihfunktion der Bibliothek
Geben Sie nach der Verarbeitung aller Befehle
Library status:aus, gefolgt von den Details jedes Buches und dem Verfügbarkeitsstatus im Format[details] - [Available/Borrowed].
Sie erhalten eine Eingabe: einen durch Kommas getrennten String von Befehlen.
Zum Beispiel bei der Eingabe 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 wäre Ihre Ausgabe:
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 - BorrowedBeachten Sie, wie das Admin-Interface einen sauberen Vertrag für administrative Operationen bietet, während die AdminService-Implementierung die eigentliche Logik übernimmt. Das System verhindert korrekt das Entfernen eines ausgeliehenen Buches, während es das Entfernen verfügbarer Bücher erlaubt. Diese Trennung von Interface und Implementierung ist ein zentrales OOP-Prinzip, das Ihren Code wartbarer und testbarer macht!
Probier es selbst
import java.util.Scanner;
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Lies die durch Kommas getrennten Befehle
String input = scanner.nextLine();
String[] commands = input.split(",");
// Erstelle Library und AdminService
Library library = new Library();
AdminService adminService = new AdminService(library);
// Verarbeite jeden Befehl
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);
}
}
// Gib den Bibliotheksstatus aus
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);
}
}
}
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas this-SchlüsselwortMethodenFelder (Attribute)Konstruktor-MethodeKonstruktor-ÜberladungRückblick – Einfacher Taschenrechner4Vererbung
Grundlagen der Vererbung (extends)Das super-SchlüsselwortMethoden überschreiben (@Override)Konstruktor-VerkettungDie Object-KlasseEinfache & mehrstufige VererbungWarum keine Mehrfachvererbung von KlassenZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden & Object-Klasse
toString()-Methodeequals() und hashCode()clone()-MethodecompareTo() und ComparableComparator-InterfaceZusammenfassung – Benutzerdefiniertes Sortieren10Ausnahmebehandlung in OOP
Exception-KlassenhierarchieBenutzerdefinierte ExceptionsChecked vs. Unchecked ErrorsTry-With-Resources-PatternRecap – Validierter Benutzer13Projekt: Bibliotheksverwaltung
Projektübersicht & UML-DesignBuch- und Benutzerklassen2Zugriffsmodifikatoren & Kapselung
Überblick über ZugriffsebenenGetter- und Setter-MethodenInformation HidingDas final-SchlüsselwortRückblick – Bankkonto-Manager5Polymorphismus
Grundlagen der MethodenüberladungMethodenüberschreibung (Laufzeit)Upcasting und DowncastingDer instanceof-OperatorAbstrakte Klassen und MethodenZusammenfassung – Formenrechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungAggregation vs. KompositionInnere, geschachtelte & anonyme KlassenEnums und Enum-MethodenRecords (Java 16+)Sealed Classes (Java 17+)11Design Patterns Teil 1
Einführung in Design PatternsSingleton-PatternFactory-PatternBuilder-PatternObserver-PatternStrategy-Pattern14Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung3Klasseneigenschaften & Statische Member
Instanz- vs. statische VariablenStatische MethodenStatische BlöckeKonstanten (static final)Zusammenfassung – Zähler & Utility6Interfaces & Abstrakte Klassen
Einführung in InterfacesInterfaces implementierenImplementierung mehrerer InterfacesDefault- & statische Methoden in InterfacesAbstrakte Klassen vs. InterfacesFunktionale InterfacesZusammenfassung - Zahlungssystem