Repaso: métodos de pago
Parte de la sección Programación orientada a objetos del Journey de Kotlin de Coddy. Lección 26 de 57.
Desafío
IntermedioDiseña los métodos de pago en torno a una interfaz.
PaymentMethodrequierename,fee(amount),pay(amount)(devuelve si se realizó el pago) ystatus(), y proporciona untotal(amount)predeterminado: el importe más la comisión.Card(nombrecard) cobra una comisión del 2 % (redondeada hacia abajo), siempre realiza el pago y cuenta sus pagos:card: 2 payment(s).Wallet(balance)(nombrewallet) no tiene comisión y solo realiza el pago cuando el saldo cubre el total, que después resta:wallet: 50 left.GiftCard(balance)(nombregift card) tampoco tiene comisión, pero solo realiza pagos de importes de como máximo 100, y únicamente cuando el saldo los cubre:gift card: 40 left.
Después completa checkout(amount, methods), que prueba cada PaymentMethod en orden y devuelve paid 100 with wallet (total 100) para el primero que realiza el pago, o declined cuando ninguno lo hace.
El código proporcionado lee los métodos como card,wallet:150,gift:120, después un importe por línea, imprime el resultado de cada checkout y, finalmente, el status() de cada método.
Tu código va en PaymentMethod.kt, Card.kt, Wallet.kt, GiftCard.kt y Functions.kt. Main.kt contiene el código proporcionado de entrada y salida y no se puede editar.
Pruébalo tú mismo
fun main() {
// Código de entrada/salida suministrado: 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())
}
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