Livres et membres
Fait partie de la section Programmation orientée objet du Journey Ruby de Coddy. Leçon 50 sur 57.
Dans ce projet, vous construisez le cœur d’un système de bibliothèque. Un objet Library reçoit des commandes, une par ligne, et répond à chacune d’elles. En cinq étapes, il apprend à ajouter des livres et des membres, à prêter et à reprendre des livres, à rechercher dans le catalogue et à imprimer un rapport.
ADD_BOOK 1 Dune
JOIN ada
BORROW ada 1
RETURN ada 1
SEARCH dune
REPORTLe modèle de données utilise ce que cette section a enseigné. Book expose id et title en lecture seule, ainsi que borrower par l’intermédiaire d’un accesseur, avec le prédicat available?. Member conserve les identifiants de ses emprunts dans un tableau. Chaque classe réside dans son propre fichier, book.rb, member.rb et library.rb, et la bibliothèque conserve les deux types d’objets dans des tables de hachage que seules ses propres méthodes manipulent :
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?Sortie :
falsehandle(line) divise la commande et choisit une branche en fonction de son premier mot avec case. Chaque branche renvoie ses réponses sous forme de tableau, ainsi une commande telle que REPORT peut répondre avec plusieurs lignes, et return quitte prématurément avec une réponse d’erreur. Le titre d’un livre peut contenir des espaces, il correspond donc à tout ce qui suit l’identifiant :
parts = "ADD_BOOK 7 The Hobbit".split
id = parts[1].to_i
title = parts[2..].join(" ")
puts "#{id}: #{title}"Sortie :
7: The HobbitDéfi
FacileComplétez Library#handle pour les deux premières commandes :
ADD_BOOK id title: stocker un nouveau livre disponible et répondreadded book 1: Dune; lorsque l’identifiant est déjà utilisé, répondrebook 1 exists.JOIN name: ajouter un membre et répondrewelcome ada; lorsque le nom existe déjà, répondreada is already a member.
Le code fourni transmet chaque ligne d’entrée à library.handle(line) et affiche chaque réponse retournée sur sa propre ligne. Les noms des membres sont des mots uniques en minuscules, les identifiants des livres sont des nombres entiers, et l’entrée contient uniquement les commandes décrites jusqu’à présent. Toute autre commande répond unknown command.
Votre code doit être placé dans book.rb, member.rb et library.rb. main.rb contient le code d’entrée/sortie fourni et ne peut pas être modifié.
Essayez vous-même
require_relative 'book'
require_relative 'member'
require_relative 'library'
# Code d'entrée/sortie fourni : le garder tel quel
input = []
while (line = gets)
input << line.chomp
end
library = Library.new
input.each do |line|
library.handle(line).each { |reply| puts reply }
end
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation orientée objet
1Classes et objets
Travailler avec des fichiersDéfinir des classesVariables d’instanceMéthodes et selfto_s et inspectRécapitulatif - Carte de bibliothèque4Encapsulation
Méthodes privéesMéthodes protégéesSetters privésProtéger l’étatRécapitulatif - Distributeur automatique7Polymorphisme et typage canard
PolymorphismeTypage canardMéthodes abstraitesCas et classesRécapitulatif - méthodes de paiement10Patrons de conception – Partie 2
Délégation avec ForwardablePatron DécorateurPatron BuilderPatron État2Accesseurs et self
Lecteurs et écrivainsSetters personnalisésself dans les méthodesIdentité et égalitéRécapitulatif - Liste de contacts5Héritage
Sous-classesRedéfinition des méthodesAppeler superis_a? et ancêtresRécapitulatif - Paie du personnel8Méthodes spéciales
Égalité et hachageMéthodes d’opérateursIndexation et ajoutCollections personnaliséesRécapitulatif - Fractions11Projet : Gestion de bibliothèque
Livres et membresEmprunter des livresEntraînez-vous par vous-même : Compilateur Ruby en ligne