Livros e Membros
Parte da seção Programação Orientada a Objetos do Journey de R da Coddy. Lição 50 de 57.
Neste projeto, você cria o núcleo de um sistema de biblioteca com Reference Classes, pois os livros e os membros mudam enquanto o programa é executado: um livro é emprestado e devolvido, e a lista de empréstimos de um membro aumenta e diminui. Um objeto Library recebe comandos, um por linha, e responde a cada um deles. Ao longo de cinco etapas, ele aprende a adicionar livros e membros, emprestar e pegar livros de volta, pesquisar no catálogo e imprimir um relatório.
ADD_BOOK 1 Dune
JOIN ada
BORROW ada 1
RETURN ada 1
SEARCH dune
REPORTO programa tem uma classe por arquivo. Book.R e Member.R contêm as duas classes pequenas, e Library.R contém a classe que as armazena em duas listas nomeadas e responde aos comandos. Como os objetos RC são referências, alterar um livro que foi encontrado na lista altera o livro na biblioteca:
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"]]))Saída:
ada TRUEhandle(line) divide o comando e usa switch() na primeira palavra para chamar o método correspondente a esse comando. Cada método retorna suas respostas como um vetor de caracteres, portanto um comando como REPORT pode responder com várias linhas. Um título pode conter espaços, então ele é tudo o que vem depois do id:
p <- strsplit("ADD_BOOK 7 The Hobbit", " ")[[1]]
id <- as.numeric(p[2])
title <- paste(p[-(1:2)], collapse = " ")
cat(id, title, sep = ": ")Saída:
7: The HobbitDesafio
FácilAs classes Book (campos id, title, borrower) e Member (campos name, borrowed) são fornecidas. Complete dois métodos de Library em Library.R:
add_book(id, title)paraADD_BOOK <id> <title>: armazene um novo livro sobas.character(id)e respondaadded book 1: Dune; quando o id já estiver ocupado, respondabook 1 exists.join(name)paraJOIN <name>: armazene um novo membro sob o nome e respondawelcome ada; quando o nome já existir, respondaada is already a member.
O código fornecido envia cada linha de entrada para lib$handle(line) e imprime cada resposta retornada em sua própria linha. Os nomes dos membros são palavras únicas em minúsculas, os ids dos livros são números inteiros, e a entrada contém apenas os comandos descritos até agora. Qualquer outro comando responde unknown command.
Seu código deve ser inserido em Book.R, Member.R e Library.R. main.R contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
source("Book.R")
source("Member.R")
source("Library.R")
# Código de entrada/saída fornecido: mantenha-o como está
input <- suppressWarnings(readLines(file("stdin")))
lib <- Library$new()
for (line in input) {
for (reply in lib$handle(line)) cat(reply, "\n", sep = "")
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Fundamentos do S3
Trabalhando com ArquivosListas com uma ClasseFunções ConstrutorasMétodos de Impressão e FormataçãoValidadores e AuxiliaresRevisão - Temperaturas4Encapsulamento em R
Closures como ObjetosAmbientes como ObjetosFunções de AcessoProtegendo o EstadoRecapitulação - Parquímetro2Genéricos e Métodos S3
Genéricos e UseMethodMétodos padrãoMétodos para genéricos baseFundamentos de NextMethodRevisão - Áreas de formas5Classes S4
Definindo classes S4Slots e acessoVerificações de validadeMétodos showRevisão - Catálogo de produtos8Classes de Referência
Definindo Classes de ReferênciaMétodos e Atualizações de CamposSemântica de CópiaHerança e callSuperRecapitulação — Fila de Tarefas11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Compilador de R online