Bücher und Mitglieder
Teil des Abschnitts Objektorientierte Programmierung der Kotlin-Journey von Coddy. Lektion 50 von 57.
In diesem Projekt erstellst du den Kern eines Bibliothekssystems. Eine Library-Klasse empfängt Befehle, einen pro Zeile, und antwortet auf jeden einzelnen. In fünf Schritten lernt sie, Bücher und Mitglieder hinzuzufügen, Bücher auszuleihen und zurückzugeben, den Katalog zu durchsuchen und einen Bericht auszugeben:
ADD_BOOK 1 Dune
JOIN ada
BORROW ada 1
RETURN ada 1
SEARCH dune
REPORTDas Datenmodell verwendet das, was in diesem Abschnitt vermittelt wurde. Book und Member befinden sich jeweils in ihrer eigenen Datei. Der borrower eines Buches kann überall gelesen, aber nur über lendTo und giveBack geändert werden, und ein Mitglied stellt die IDs seiner Ausleihen als schreibgeschützte List bereit. Die Bibliothek verwaltet beide in privaten Maps, sodass nur ihre eigenen Methoden sie ändern können:
class Book(val id: Int, val title: String) {
var borrower: String? = null
private set
val isAvailable: Boolean
get() = borrower == null
fun lendTo(name: String) { borrower = name }
}Innerhalb von main:
val books = mutableMapOf<Int, Book>()
books[1] = Book(1, "Dune")
books.getValue(1).lendTo("ada")
println("${books.getValue(1).isAvailable} ${books.getValue(1).borrower}")Ausgabe:
false adahandle(line) teilt den Befehl auf und verwendet ein when für dessen erstes Wort. Jeder Zweig gibt seine Antworten als eine List<String> zurück, sodass ein Befehl wie REPORT mit mehreren Zeilen antworten kann und ein vorzeitiges return eine Ablehnung zurückgibt. Der Titel eines Buches kann Leerzeichen enthalten, daher umfasst er alles nach der ID:
Innerhalb von main:
val p = "ADD_BOOK 7 The Hobbit".split(" ")
val id = p[1].toInt()
val title = p.drop(2).joinToString(" ")
println("$id: $title")Ausgabe:
7: The HobbitAufgabe
EinfachVervollständige Library.handle(line) für die ersten beiden Befehle:
ADD_BOOK <id> <title>: Speichere ein neues verfügbares Buch und antworte mitadded book 1: Dune; wenn die ID bereits vergeben ist, antworte mitbook 1 exists.JOIN <name>: Füge ein Mitglied hinzu und antworte mitwelcome ada; wenn der Name bereits existiert, antworte mitada is already a member.
Der bereitgestellte Code übergibt jede Eingabezeile an library.handle(line) und gibt jede zurückgegebene Antwort in einer eigenen Zeile aus. Mitgliedsnamen sind einzelne kleingeschriebene Wörter, Buch-IDs sind ganze Zahlen, und die Eingabe enthält nur die bisher beschriebenen Befehle. Auf jeden anderen Befehl wird mit unknown command geantwortet.
Dein Code gehört in Book.kt, Member.kt und Library.kt. Main.kt enthält den bereitgestellten Eingabe-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
fun main() {
// Bereitgestellter Ein-/Ausgabe-Code: belasse ihn so wie er ist
val input = generateSequence(::readLine).toList()
val library = Library()
for (line in input) {
for (reply in library.handle(line)) println(reply)
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Klassen und Objekte
Arbeiten mit DateienKlassen definierenPrimärkonstruktoreninit-Blöcke und ValidierungSekundärkonstruktorenRückblick – Bibliotheksausweis4Vererbung
Offene Klassen und UnterklassenÜberschreiben von Membernsuper und KonstruktorenAbstrakte KlassenRückblick – Mitarbeiterverzeichnis2Eigenschaften und Kapselung
Benutzerdefinierte ZugriffsmethodenSichtbarkeitsmodifikatorenPrivate Setterlazy und lateinitWiederholung – Bankkonto5Schnittstellen
Schnittstellen deklarierenStandardmethodenMehrere SchnittstellenSchnittstellen als TypenRückblick – Zahlungsmethoden8Generics
Generische FunktionenGenerische KlassenTypbeschränkungenVarianz mit in und outRückblick – Prioritätswarteschlange11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Kotlin-Playground