Menu
Coddy logo textTech

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.

challenge icon

Desafío

Intermedio

Diseña los métodos de pago en torno a una interfaz.

  • PaymentMethod requiere name, fee(amount), pay(amount) (devuelve si se realizó el pago) y status(), y proporciona un total(amount) predeterminado: el importe más la comisión.
  • Card (nombre card) cobra una comisión del 2 % (redondeada hacia abajo), siempre realiza el pago y cuenta sus pagos: card: 2 payment(s).
  • Wallet(balance) (nombre wallet) no tiene comisión y solo realiza el pago cuando el saldo cubre el total, que después resta: wallet: 50 left.
  • GiftCard(balance) (nombre gift 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

Practica por tu cuenta: Playground de Kotlin