Bücher und Mitglieder
Teil des Abschnitts Objektorientierte Programmierung der R-Journey von Coddy. Lektion 50 von 57.
In diesem Projekt erstellst du den Kern eines Bibliothekssystems mit Referenzklassen, da sich Bücher und Mitglieder ändern, während das Programm läuft: Ein Buch wird verliehen und zurückgegeben, die Liste der Ausleihen eines Mitglieds wird länger und kürzer. Ein Library-Objekt 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 zu verleihen und zurückzunehmen, im Katalog zu suchen und einen Bericht auszugeben.
ADD_BOOK 1 Dune
JOIN ada
BORROW ada 1
RETURN ada 1
SEARCH dune
REPORTDas Programm hat eine Klasse pro Datei. Book.R und Member.R enthalten die beiden kleinen Klassen, und Library.R enthält die Klasse, die sie in zwei benannten Listen speichert und die Befehle beantwortet. Da RC-Objekte Referenzen sind, ändert das Ändern eines Buchs, das in der Liste gefunden wurde, das Buch in der Bibliothek:
Book <- setRefClass("Book", fields = list(id = "numeric", title = "character", borrower = "character"))
books <- list()
books[["7"]] <- Book$new(id = 7, title = "Dune")
b <- books[["7"]]
b$borrower <- "ada"
cat(books[["7"]]$borrower, is.null(books[["9"]]))Ausgabe:
ada TRUEhandle(line) teilt den Befehl auf und verwendet switch() für sein erstes Wort, um die Methode für diesen Befehl aufzurufen. Jede Methode gibt ihre Antworten als Zeichenvektor zurück, sodass ein Befehl wie REPORT mit mehreren Zeilen antworten kann. Ein Titel kann Leerzeichen enthalten, daher umfasst er alles nach der ID:
p <- strsplit("ADD_BOOK 7 The Hobbit", " ")[[1]]
id <- as.numeric(p[2])
title <- paste(p[-(1:2)], collapse = " ")
cat(id, title, sep = ": ")Ausgabe:
7: The HobbitAufgabe
EinfachDie Klassen Book (Felder id, title, borrower) und Member (Felder name, borrowed) sind vorgegeben. Vervollständige zwei Methoden von Library in Library.R:
add_book(id, title)fürADD_BOOK <id> <title>: Speichere ein neues Buch unteras.character(id)und antworte mitadded book 1: Dune; wenn die ID bereits vergeben ist, antworte mitbook 1 exists.join(name)fürJOIN <name>: Speichere ein neues Mitglied unter dem Namen und antworte mitwelcome ada; wenn der Name bereits existiert, antworte mitada is already a member.
Der bereitgestellte Code übergibt jede Eingabezeile an lib$handle(line) und gibt jede zurückgegebene Antwort in einer eigenen Zeile aus. Mitgliedsnamen sind einzelne Kleinbuchstabenwörter, Buch-IDs sind ganze Zahlen, und die Eingabe enthält nur die bisher beschriebenen Befehle. Bei jedem anderen Befehl wird mit unknown command geantwortet.
Dein Code gehört in Book.R, Member.R und Library.R. main.R enthält den bereitgestellten Ein-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
source("Book.R")
source("Member.R")
source("Library.R")
# Gelieferter Ein-/Ausgabecode: belasse ihn wie er ist
input <- suppressWarnings(readLines(file("stdin")))
lib <- Library$new()
for (line in input) {
for (reply in lib$handle(line)) cat(reply, "\n", sep = "")
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1S3-Grundlagen
Arbeiten mit DateienListen mit einer KlasseKonstruktorfunktionenPrint- und Format-MethodenValidatoren und HilfsfunktionenRückblick – Temperaturen4Kapselung in R
Closures als ObjekteUmgebungen als ObjekteZugriffsfunktionenZustand schützenRückblick – Parkuhr2S3-Generics und Methoden
Generics und UseMethodStandardmethodenMethoden für Basis-GenericsGrundlagen von NextMethodWiederholung – Flächeninhalte von Formen5S4-Klassen
S4-Klassen definierenSlots und ZugriffGültigkeitsprüfungenShow-MethodenRückblick – Produktkatalog8Referenzklassen
Referenzklassen definierenMethoden und FeldänderungenKopiersemantikVererbung und callSuperZusammenfassung – Aufgabenwarteschlange11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Online-R-Compiler