Récapitulatif - Méthodes de paiement
Fait partie de la section Programmation orientée objet du Journey Kotlin de Coddy. Leçon 26 sur 57.
Défi
MoyenConçois les méthodes de paiement autour d'une interface.
PaymentMethodexigename,fee(amount),pay(amount)(indique si le paiement a été effectué) etstatus(), et fournit untotal(amount)par défaut : le montant augmenté des frais.Card(nomcard) facture des frais de 2 % (arrondis à l'entier inférieur), paie toujours et compte ses paiements :card: 2 payment(s).Wallet(balance)(nomwallet) n'a aucuns frais et paie uniquement lorsque le solde couvre le total, qu'il soustrait ensuite :wallet: 50 left.GiftCard(balance)(nomgift card) n'a pas non plus de frais, mais ne paie que les montants inférieurs ou égaux à 100, et uniquement lorsque le solde les couvre :gift card: 40 left.
Complète ensuite checkout(amount, methods), qui essaie chaque PaymentMethod dans l'ordre et renvoie paid 100 with wallet (total 100) pour le premier qui paie, ou declined lorsqu'aucun ne paie.
Le code fourni lit les méthodes sous la forme card,wallet:150,gift:120, puis un montant par ligne, affiche le résultat de chaque paiement et enfin le status() de chaque méthode.
Ton code doit se trouver dans PaymentMethod.kt, Card.kt, Wallet.kt, GiftCard.kt et Functions.kt. Main.kt contient le code fourni pour les entrées et sorties et ne peut pas être modifié.
Essayez vous-même
fun main() {
// Code d'entrée/sortie fourni : le laisser tel quel
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())
}
Toutes les leçons de Programmation orientée objet
1Classes et objets
Travailler avec des fichiersDéfinir des classesConstructeurs primairesBlocs init et validationConstructeurs secondairesRécapitulatif - Carte de bibliothèque4Héritage
Classes ouvertes et sous-classesRedéfinition des membressuper et constructeursClasses abstraitesRécapitulatif – Annuaire du personnel2Propriétés et encapsulation
Accesseurs personnalisésModificateurs de visibilitéSetters privéslazy et lateinitRécapitulatif - Compte bancaire5Interfaces
Déclarer des interfacesMéthodes par défautInterfaces multiplesInterfaces en tant que typesRécapitulatif - Méthodes de paiement8Génériques
Fonctions génériquesClasses génériquesContraintes de typeVariance avec in et outRécapitulatif - File de priorité11Projet : Gestion de bibliothèque
Livres et membresEmprunter des livresEntraînez-vous par vous-même : Playground Kotlin