Riepilogo - Metodi di pagamento
Fa parte della sezione Programmazione orientata agli oggetti del percorso Kotlin di Coddy. Lezione 26 di 57.
Sfida
MedioProgetta i metodi di pagamento attorno a un'interfaccia.
PaymentMethodrichiedename,fee(amount),pay(amount)(restituisce se il pagamento è stato effettuato) estatus(), e fornisce untotal(amount)predefinito: l'importo più la commissione.Card(nomecard) applica una commissione del 2% (arrotondata per difetto), paga sempre e tiene il conto dei pagamenti:card: 2 payment(s).Wallet(balance)(nomewallet) non applica commissioni e paga solo se il saldo copre il totale, che viene quindi sottratto:wallet: 50 left.GiftCard(balance)(nomegift card) non applica nemmeno commissioni, ma paga solo importi pari o inferiori a 100 e solo se il saldo li copre:gift card: 40 left.
Completa quindi checkout(amount, methods), che prova ogni PaymentMethod nell'ordine e restituisce paid 100 with wallet (total 100) per il primo che paga, oppure declined se nessuno paga.
Il codice fornito legge i metodi come card,wallet:150,gift:120, poi un importo per riga, stampa il risultato di ogni checkout e infine lo status() di ogni metodo.
Il tuo codice va inserito in PaymentMethod.kt, Card.kt, Wallet.kt, GiftCard.kt e Functions.kt. Main.kt contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
fun main() {
// Código de entrada/salida proporcionado: mantenlo tal como está
val input = generateSequence(::readLine).toList()
val methods = input[0].split(",").map { spec ->
val p = spec.split(":")
when (p[0]) {
"card" -> Card()
"wallet" -> Wallet(p[1].toInt())
else -> GiftCard(p[1].toInt())
}
}
for (line in input.drop(1)) println(checkout(line.toInt(), methods))
for (m in methods) println(m.status())
}
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 libriEsercitati da solo: Playground Kotlin