Estacionamento
Parte da seção Programação Orientada a Objetos do Journey de Swift da Coddy. Lição 55 de 57.
Desafio
DifícilConstrua uma garagem. O protocolo Vehicle tem plate, size (um enum Size: Int, Comparable com small = 1, medium = 2, large = 3) e hourlyRate. Implemente Motorbike (pequena, 1 por hora), Car (médio, 3) e Van (grande, 5). A classe Garage é criada com uma quantidade de vagas por tamanho. park(_:) coloca um veículo em uma vaga livre do seu próprio tamanho ou, se nenhuma estiver livre, do próximo tamanho maior, e responde parked AB12 in medium ou full for AB12. leave(plate:hours:) libera a vaga e responde AB12 paid 9 (tarifa vezes horas, no mínimo 1 hora), ou no vehicle AB12. status() responde free: small 1, medium 0, large 2.
O código fornecido lê as vagas como small,medium,large, depois os comandos park car AB12, leave AB12 3 ou status, e imprime cada resposta.
Seu código deve estar em Size.swift, Vehicle.swift, Motorbike.swift, Car.swift, Van.swift e Garage.swift. main.swift contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
// Código de entrada/saída fornecido: mantenha-o como está
var input: [String] = []
while let line = readLine() { input.append(line) }
let s = input[0].split(separator: ",").map { Int($0)! }
let garage = Garage(small: s[0], medium: s[1], large: s[2])
for cmd in input.dropFirst() {
let p = cmd.split(separator: " ").map(String.init)
switch p[0] {
case "park":
let v: any Vehicle
switch p[1] {
case "bike": v = Motorbike(plate: p[2])
case "van": v = Van(plate: p[2])
default: v = Car(plate: p[2])
}
print(garage.park(v))
case "leave": print(garage.leave(plate: p[1], hours: Int(p[2])!))
default: print(garage.status())
}
}
Todas as lições de Programação Orientada a Objetos
1Classes e Objetos
Trabalhando com ArquivosDefinindo ClassesMétodos e selfInicializadoresClasses são ReferênciasRevisão - Cartão da Biblioteca4Encapsulamento
Controle de AcessoSomente Leitura ExternaProtegendo o EstadoInicializadores que Podem FalharRevisão - Conta Bancária7Polimorfismo e Genéricos
PolimorfismoConversão de TiposFunções GenéricasTipos GenéricosRevisão - Calculadora de Formas2Structs e Tipos de Valor
StructsSemântica de ValorMétodos MutáveisStruct ou ClasseRecapitulação - Item de Inventário5Herança
SubclassesSobrescrita de métodosInicializadores e superfinal e hierarquiasRecapitulação - Hierarquia de funcionários8Protocolos Padrão
CustomStringConvertibleEquatableComparableHashableRecapitulação - Ordenação Personalizada11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Playground de Swift