Ripasso - Biglietteria
Fa parte della sezione Programmazione orientata agli oggetti del percorso Kotlin di Coddy. Lezione 16 di 57.
Sfida
MedioCrea una piccola biglietteria usando tre tipi di dichiarazione.
Ticketha un costruttore privato che accettanumber,showeseat. Il suo companion contieneconst val SEATS = 3, un contatore privato e la factoryissue(show, seat), che assegna ai biglietti i numeri 1, 2, 3, ...;issuedè il numero di biglietti emessi finora.label()restituisce#1 Hamlet seat 2.BoxOfficeè un oggetto.sell(show, seat)rispondeno seat 4quando il posto è al di fuori dell'intervallo da 1 aTicket.SEATS,seat 2 takenquando è già venduto per quello spettacolo e, altrimenti, emette un biglietto e risponde con la sua etichetta.refund(number)libera il posto di un biglietto venduto e risponderefunded #1, oppureno ticket #9.report()rispondeHamlet 2/3, Cats 1/3con gli spettacoli in ordine alfabetico, oppurenothing sold.
Il codice fornito legge i comandi sell Hamlet 2, refund 1 o report, stampa ogni risposta e infine tickets issued: con il conteggio. I numeri non vengono mai riutilizzati dopo un rimborso.
Il tuo codice va inserito in Ticket.kt e BoxOffice.kt. Main.kt contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
fun main() {
// Codice di input/output fornito: lascialo così com'è
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}")
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Classi e oggetti
Lavorare con i fileDefinire le classiCostruttori primariBlocchi init e convalidaCostruttori secondariRiepilogo - Tessera della biblioteca4Ereditarietà
Classi aperte e sottoclassiRidefinizione dei membrisuper e costruttoriClassi astratteRiepilogo - Elenco del personale2Proprietà e incapsulamento
Accessor personalizzatiModificatori di visibilitàSetter privatilazy e lateinitRipasso - Conto bancario5Interfacce
Dichiarare le interfacceMetodi predefinitiInterfacce multipleLe interfacce come tipiRiepilogo - Metodi di pagamento8Tipi generici
Funzioni genericheClassi genericheVincoli sui tipiVarianza con in e outRiepilogo - Coda con priorità11Progetto: Gestione della biblioteca
Libri e sociPrendere in prestito i libri3Oggetti e companion
Dichiarazioni di oggettiOggetti companionCostanti con constEspressioni oggettoRipasso - BiglietteriaEsercitati da solo: Playground Kotlin