Recapitulação - Parquímetro
Parte da seção Programação Orientada a Objetos do Journey de R da Coddy. Lição 21 de 57.
Desafio
MédioComplete a fábrica make_meter(rate) em Meter.R. rate é o número de minutos que um centavo compra; bloqueie-o com lockBinding() dentro da fábrica para que ele nunca possa mudar. O parquímetro mantém os minutos restantes e os centavos pagos como variáveis privadas e retorna quatro funções:
insert(cents)aceita somente 10, 20, 50 ou 100 e, caso contrário, interrompe comcoin not accepted; cada moeda adicionacents * rateminutos e conta para o valor pago.wait(minutes)permite que o tempo passe: os minutos restantes diminuem, mas nunca ficam abaixo de 0. Uma espera negativa interrompe comtime cannot go back.status()retorna12 min leftouexpiredquando não resta tempo.paid()retorna os centavos pagos.
Use call. = FALSE. O código fornecido lê a taxa, depois as linhas coin 20 ou wait 5, e imprime o status ou error: e a mensagem após cada uma. Por fim, ele imprime o valor pago e tenta alterar rate dentro do ambiente da fábrica.
Seu código deve ficar em Meter.R. main.R contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
source("Meter.R")
# Código de entrada/saída fornecido: mantenha-o como está
input <- suppressWarnings(readLines(file("stdin")))
meter <- make_meter(as.numeric(input[1]))
for (line in input[-1]) {
p <- strsplit(line, " ")[[1]]
msg <- tryCatch({
if (p[1] == "coin") meter$insert(as.numeric(p[2]))
if (p[1] == "wait") meter$wait(as.numeric(p[2]))
meter$status()
}, error = function(e) paste("error:", conditionMessage(e)))
cat(line, ": ", msg, "\n", sep = "")
}
cat("paid: ", meter$paid(), " cents\n", sep = "")
r <- tryCatch({ environment(meter$insert)$rate <- 0; "rate changed" }, error = function(e) "rate is locked")
cat(r, "\n", sep = "")
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