Bücher und Mitglieder
Teil des Abschnitts Objektorientierte Programmierung der Swift-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 lernst du, 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 die Werkzeuge dieses Abschnitts. Book ist eine Struktur: ein Wert, dessen borrower sich ändert. Member ist eine Klasse, weil die Bibliothek und die Ausleihliste eines Mitglieds auf dieselbe Person verweisen. Die Bibliothek verwahrt beide in privaten Dictionaries, sodass nur ihre Methoden sie ändern können:
struct Book {
let id: Int
let title: String
var borrower: String? = nil
var isAvailable: Bool { borrower == nil }
}
var books: [Int: Book] = [:]
books[1] = Book(id: 1, title: "Dune")
books[1]!.borrower = "ada"
print(books[1]!.isAvailable)Ausgabe:
falsehandle(_:) teilt den Befehl auf und verzweigt anhand seines ersten Wortes. Jeder Zweig gibt seine Antworten als Array zurück, sodass ein Befehl wie REPORT mehrere Zeilen zurückgeben kann. Der Titel eines Buches kann Leerzeichen enthalten; er umfasst daher alles nach der ID:
let p = "ADD_BOOK 7 The Hobbit".split(separator: " ").map(String.init)
let id = Int(p[1])!
let title = p.dropFirst(2).joined(separator: " ")
print("\(id): \(title)")Ausgabe:
7: The HobbitAufgabe
EinfachVervollständige Library.handle(_:) 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(_:) und gibt jede zurückgegebene Antwort in einer eigenen Zeile aus. Mitgliedsnamen bestehen aus einzelnen kleingeschriebenen Wörtern, Buch-IDs sind ganze Zahlen, und die Eingabe enthält nur die bisher beschriebenen Befehle. Bei jedem anderen Befehl lautet die Antwort unknown command.
Dein Code gehört in Book.swift, Member.swift und Library.swift. main.swift enthält den bereitgestellten Ein-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
// Vorgegebener Ein-/Ausgabecode: unverändert lassen
var input: [String] = []
while let line = readLine() { input.append(line) }
let library = Library()
for line in input {
for reply in library.handle(line) { print(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 definierenMethoden und selfInitialisiererKlassen sind ReferenzenRückblick – Bibliotheksausweis4Kapselung
ZugriffskontrolleVon außen schreibgeschütztZustand schützenFehlschlagende InitialisiererRückblick – Bankkonto7Polymorphismus und Generika
PolymorphismusTypumwandlungGenerische FunktionenGenerische TypenZusammenfassung – Shape-Rechner2Strukturen und Werttypen
StrukturenWertsemantikVerändernde MethodenStruktur oder KlasseZusammenfassung – Inventarelement5Vererbung
UnterklassenMethoden überschreibenInitialisierer und superfinal und HierarchienRückblick – Mitarbeiterhierarchie8Standardprotokolle
CustomStringConvertibleEquatableComparableHashableRückblick – Benutzerdefiniertes Sortieren11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Swift-Playground