Revisão - Bilheteria
Parte da seção Programação Orientada a Objetos do Journey de Kotlin da Coddy. Lição 16 de 57.
Desafio
MédioConstrua uma pequena bilheteria usando três tipos de declaração.
Tickettem um construtor privado que recebenumber,showeseat. Seu companion contémconst val SEATS = 3, um contador privado e a fábricaissue(show, seat), que atribui aos ingressos os números 1, 2, 3, ...;issuedé o número de ingressos emitidos até o momento.label()retorna#1 Hamlet seat 2.BoxOfficeé um objeto.sell(show, seat)respondeno seat 4quando o assento está fora do intervalo de 1 aTicket.SEATS,seat 2 takenquando ele já foi vendido para aquele show e, caso contrário, emite um ingresso e responde com seu rótulo.refund(number)libera o assento de um ingresso vendido e responderefunded #1ouno ticket #9.report()respondeHamlet 2/3, Cats 1/3com os shows em ordem alfabética, ounothing sold.
O código fornecido lê os comandos sell Hamlet 2, refund 1 ou report, imprime cada resposta e, por fim, tickets issued: com a contagem. Os números nunca são reutilizados após um reembolso.
Seu código deve ser colocado em Ticket.kt e BoxOffice.kt. Main.kt contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
fun main() {
// Código de entrada/saída fornecido: mantenha-o 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 as lições de Programação Orientada a Objetos
1Classes e Objetos
Trabalhando com ArquivosDefinindo ClassesConstrutores PrimáriosBlocos init e ValidaçãoConstrutores SecundáriosRecapitulação - Cartão da Biblioteca4Herança
Classes Abertas e SubclassesSobrescrevendo Membrossuper e ConstrutoresClasses AbstratasRevisão - Diretório de Funcionários2Propriedades e Encapsulamento
Acessores PersonalizadosModificadores de VisibilidadeSetters Privadoslazy e lateinitRevisão - Conta Bancária5Interfaces
Declarando InterfacesMétodos PadrãoMúltiplas InterfacesInterfaces como TiposRecapitulação - Métodos de Pagamento8Genéricos
Funções genéricasClasses genéricasRestrições de tipoVariância com in e outRecapitulação - Fila de prioridade11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de Livros3Objetos e Companheiros
Declarações de ObjetosObjetos CompanionConstantes com constExpressões de ObjetosRevisão - BilheteriaPratique por conta própria: Playground de Kotlin