Estacionamento
Parte da seção Programação Orientada a Objetos do Journey de R da Coddy. Lição 55 de 57.
Desafio
DifícilConstrua uma garagem de estacionamento. Vehicle.R declara a classe S4 virtual Vehicle (slot plate), os genéricos size_rank(v) e rate(v) e os nomes SIZES: small, medium, large para as categorias 1, 2 e 3.
- Em
Motorbike.R,Car.ReVan.R, as classes são declaradas; adicione seus métodos: uma moto tem categoria 1 e paga 1 por hora, um carro tem categoria 2 e paga 3 por hora, uma van tem categoria 3 e paga 5 por hora. - Em
Garage.R, conclua a classe de referênciaGarage. Seu campofreecontém as vagas livres por categoria eparkedé uma lista indexada pela placa.park(v)ocupa uma vaga livre da própria categoria do veículo ou, se nenhuma estiver livre, da próxima categoria maior, e retornaparked AB12 in medium,full for AB12ouAB12 is already parked.leave(plate, hours)libera a vaga e retornaAB12 paid 9(a tarifa multiplicada pelas horas, com no mínimo 1 hora) ouno vehicle AB12.status()retornafree: small 1, medium 0, large 2; parked: 1.
O código fornecido lê as vagas livres como small,medium,large e, em seguida, os comandos park car AB12 (bike, car ou van), leave AB12 3 ou status, imprimindo cada resposta.
Seu código deve ficar em Vehicle.R, Motorbike.R, Car.R, Van.R e Garage.R. main.R contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
source("Vehicle.R")
source("Motorbike.R")
source("Car.R")
source("Van.R")
source("Garage.R")
# Código de entrada/saída fornecido: mantenha-o como está
input <- suppressWarnings(readLines(file("stdin")))
garage <- Garage$new(free = as.numeric(strsplit(input[1], ",")[[1]]))
for (line in input[-1]) {
p <- strsplit(line, " ")[[1]]
reply <- switch(p[1],
park = garage$park(switch(p[2],
bike = new("Motorbike", plate = p[3]),
car = new("Car", plate = p[3]),
van = new("Van", plate = p[3]))),
leave = garage$leave(p[2], as.numeric(p[3])),
status = garage$status())
cat(reply, "\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