Rückblick – Bibliotheksausweis
Teil des Abschnitts Objektorientierte Programmierung der Kotlin-Journey von Coddy. Lektion 6 von 57.
Aufgabe
MittelDeklariere die Klasse LibraryCard(val name: String, val limit: Int = 3). Ihr init-Block verlangt einen nicht leeren Namen (name is empty) und ein Limit von mindestens 1 (limit must be positive). Sie verwaltet eine Liste ausgeliehener Titel. borrow(title) gibt true zurück und fügt den Titel hinzu, es sei denn, die Karte hat ihr Limit erreicht oder enthält ihn bereits. giveBack(title) gibt true zurück, wenn der Titel entfernt wurde. status() gibt Ada: 2/3 (Dune, Emma) in der Reihenfolge der Ausleihen zurück oder Ada: 0/3, wenn nichts ausgeliehen ist.
Der bereitgestellte Code liest den Namen, das Limit (oder eine leere Zeile für den Standardwert) und anschließend Befehle +title oder -title. Für jeden Befehl gibt er ok oder no aus und anschließend status(); bei einer ungültigen Karte wird stattdessen die Fehlermeldung ausgegeben.
Dein Code gehört in LibraryCard.kt. Main.kt enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.
Probier es selbst
fun main() {
// Gelieferter Ein-/Ausgabe-Code: belasse ihn wie er ist
val input = generateSequence(::readLine).toList()
try {
val card = if (input[1].isEmpty()) LibraryCard(input[0]) else LibraryCard(input[0], input[1].toInt())
for (cmd in input.drop(2)) {
val title = cmd.drop(1)
val done = if (cmd.startsWith("+")) card.borrow(title) else card.giveBack(title)
println(if (done) "ok" else "no")
}
println(card.status())
} catch (e: IllegalArgumentException) {
println(e.message)
}
}
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