Bücher und Mitglieder
Teil des Abschnitts Objektorientierte Programmierung der Ruby-Journey von Coddy. Lektion 50 von 57.
In diesem Projekt baust du den Kern eines Bibliothekssystems. Ein Library-Objekt empfängt Befehle, einen pro Zeile, und antwortet auf jeden einzelnen. In fünf Schritten lernt es, Bücher und Mitglieder hinzuzufügen, Bücher auszuleihen und zurückzunehmen, 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 stellt id und title schreibgeschützt sowie borrower über einen Accessor bereit, mit dem Prädikat available?. Member speichert die IDs seiner Ausleihen in einem Array. Jede Klasse befindet sich in ihrer eigenen Datei, book.rb, member.rb und library.rb, und die Bibliothek verwaltet beide Arten von Objekten in Hashes, auf die nur ihre eigenen Methoden zugreifen:
class Book
attr_reader :id, :title
attr_accessor :borrower
def initialize(id, title)
@id = id
@title = title
@borrower = nil
end
def available?
borrower.nil?
end
end
books = { 1 => Book.new(1, "Dune") }
books[1].borrower = "ada"
puts books[1].available?Ausgabe:
falsehandle(line) teilt den Befehl auf und verzweigt anhand seines ersten Wortes mit case. Jeder Zweig gibt seine Antworten als Array zurück, sodass ein Befehl wie REPORT mit mehreren Zeilen antworten kann, und return verlässt die Ausführung frühzeitig mit einer Fehlermeldung. Der Titel eines Buches kann Leerzeichen enthalten, daher umfasst er alles nach der ID:
parts = "ADD_BOOK 7 The Hobbit".split
id = parts[1].to_i
title = parts[2..].join(" ")
puts "#{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 vorhanden ist, 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. Mitgliedernamen sind einzelne kleingeschriebene Wörter, Buch-IDs sind ganze Zahlen, und die Eingabe enthält nur die bisher beschriebenen Befehle. Jeder andere Befehl liefert die Antwort unknown command.
Dein Code gehört in book.rb, member.rb und library.rb. main.rb enthält den bereitgestellten Eingabe-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
require_relative 'book'
require_relative 'member'
require_relative 'library'
# Gelieferter Ein-/Ausgabecode: belasse ihn wie er ist
input = []
while (line = gets)
input << line.chomp
end
library = Library.new
input.each do |line|
library.handle(line).each { |reply| puts reply }
end
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 definierenInstanzvariablenMethoden und selfto_s und inspectRückblick – Bibliotheksausweis4Kapselung
Private MethodenGeschützte MethodenPrivate SetterZustand schützenRückblick – Verkaufsautomat7Polymorphismus und Duck Typing
PolymorphismusDuck TypingAbstrakte MethodenFälle und KlassenRückblick – Zahlungsmethoden2Getter und Setter sowie self
Leser und SchreiberBenutzerdefinierte Setterself in MethodenIdentität und GleichheitWiederholung – Kontaktliste5Vererbung
UnterklassenMethoden überschreibensuper aufrufenis_a? und VorfahrenRückblick – Gehaltsabrechnung des Personals8Spezielle Methoden
Gleichheit und HashOperator-MethodenIndexieren und AnhängenBenutzerdefinierte CollectionsRückblick – Brüche11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Online-Ruby-Compiler