Repaso: taquilla
Parte de la sección Programación orientada a objetos del Journey de Kotlin de Coddy. Lección 16 de 57.
Desafío
IntermedioConstruye una pequeña taquilla a partir de tres tipos de declaración.
Tickettiene un constructor privado que recibenumber,showyseat. Su objeto complementario contieneconst val SEATS = 3, un contador privado y la fábricaissue(show, seat), que asigna a los tickets los números 1, 2, 3, ...;issuedes el número de tickets emitidos hasta el momento.label()devuelve#1 Hamlet seat 2.BoxOfficees un objeto.sell(show, seat)respondeno seat 4cuando el asiento está fuera del rango de 1 aTicket.SEATS,seat 2 takencuando ya se ha vendido para ese espectáculo y, en caso contrario, emite un ticket y responde con su etiqueta.refund(number)libera el asiento de un ticket vendido y responderefunded #1, ono ticket #9.report()respondeHamlet 2/3, Cats 1/3con los espectáculos en orden alfabético, onothing sold.
El código proporcionado lee los comandos sell Hamlet 2, refund 1 o report, imprime cada respuesta y finalmente tickets issued: con el recuento. Los números nunca se reutilizan después de un reembolso.
Tu código va en Ticket.kt y BoxOffice.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()
for (cmd in input) {
val p = cmd.split(" ")
when (p[0]) {
"sell" -> println(BoxOffice.sell(p[1], p[2].toInt()))
"refund" -> println(BoxOffice.refund(p[1].toInt()))
else -> println(BoxOffice.report())
}
}
println("tickets issued: ${Ticket.issued}")
}
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