Estacionamiento
Parte de la sección Programación orientada a objetos del Journey de Kotlin de Coddy. Lección 55 de 57.
Desafío
DifícilConstruye un garaje de estacionamiento.
- La enumeración
SizetieneSMALL,MEDIUMyLARGE, en ese orden, cada uno con unalabelen minúsculas. Vehicle(plate)es una clase sellada con las propiedades abstractassizeyhourlyRate.Motorbikees pequeño (1 por hora),Cares mediano (3) yVanes grande (5).Garage(small, medium, large)se crea con el número de plazas por tamaño.park(vehicle)coloca el vehículo en una plaza libre de su propio tamaño o, si no hay ninguna, en la siguiente plaza de mayor tamaño que esté disponible, y respondeparked AB12 in medium,full for AB12oAB12 is already parked.leave(plate, hours)libera la plaza y respondeAB12 paid 9(tarifa por horas, al menos 1 hora), ono vehicle AB12.status()respondefree: small 1, medium 0, large 2.
El código proporcionado lee las plazas como small,medium,large, después los comandos park car AB12 (bike, car o van), leave AB12 3 o status, e imprime cada respuesta.
Tu código debe ir en Size.kt, Vehicle.kt, Motorbike.kt, Car.kt, Van.kt y Garage.kt. Main.kt contiene el código proporcionado de entrada/salida y no se puede editar.
Pruébalo tú mismo
fun main() {
// Código de entrada/salida suministrado: déjalo tal como está
val input = generateSequence(::readLine).toList()
val (small, medium, large) = input[0].split(",").map { it.toInt() }
val garage = Garage(small, medium, large)
for (cmd in input.drop(1)) {
val p = cmd.split(" ")
when (p[0]) {
"park" -> {
val vehicle = when (p[1]) {
"bike" -> Motorbike(p[2])
"van" -> Van(p[2])
else -> Car(p[2])
}
println(garage.park(vehicle))
}
"leave" -> println(garage.leave(p[1], p[2].toInt()))
else -> println(garage.status())
}
}
}
Todas las lecciones de Programación orientada a objetos
1Clases y objetos
Trabajar con archivosDefinir clasesConstructores primariosBloques init y validaciónConstructores secundariosRepaso - Tarjeta de biblioteca4Herencia
Clases abiertas y subclasesSobrescritura de miembrossuper y constructoresClases abstractasRepaso: directorio del personal2Propiedades y encapsulación
Accesores personalizadosModificadores de visibilidadSetters privadoslazy y lateinitRepaso: cuenta bancaria5Interfaces
Declaración de interfacesMétodos predeterminadosInterfaces múltiplesInterfaces como tiposRepaso: métodos de pago8Genéricos
Funciones genéricasClases genéricasRestricciones de tiposVariancia con in y outRepaso - Cola de prioridad11Proyecto: Gestión de biblioteca
Libros y miembrosPréstamo de librosPractica por tu cuenta: Playground de Kotlin