Rückblick – Zahlungsmethoden
Teil des Abschnitts Objektorientierte Programmierung der Kotlin-Journey von Coddy. Lektion 26 von 57.
Aufgabe
MittelEntwirf Zahlungsmethoden rund um ein Interface.
PaymentMethoderfordertname,fee(amount),pay(amount)(gibt zurück, ob die Zahlung erfolgreich war) undstatus()und stellt ein Standard-total(amount)bereit: den Betrag plus die Gebühr.Card(Namecard) berechnet eine Gebühr von 2 % (abgerundet), zahlt immer und zählt seine Zahlungen:card: 2 payment(s).Wallet(balance)(Namewallet) hat keine Gebühr und zahlt nur, wenn das Guthaben den Gesamtbetrag abdeckt, den es anschließend abzieht:wallet: 50 left.GiftCard(balance)(Namegift card) hat ebenfalls keine Gebühr, zahlt aber nur Beträge von höchstens 100 und nur, wenn das Guthaben diese abdeckt:gift card: 40 left.
Vervollständige anschließend checkout(amount, methods). Die Funktion probiert jedes PaymentMethod der Reihe nach aus und gibt für das erste, das zahlt, paid 100 with wallet (total 100) zurück oder declined, wenn keines zahlt.
Der bereitgestellte Code liest die Methoden als card,wallet:150,gift:120 ein, anschließend einen Betrag pro Zeile, gibt das Ergebnis jedes Zahlungsvorgangs aus und schließlich den status() jeder Methode.
Dein Code gehört in PaymentMethod.kt, Card.kt, Wallet.kt, GiftCard.kt und Functions.kt. Main.kt enthält den bereitgestellten Eingabe-/Ausgabecode und kann nicht bearbeitet werden.
Probier es selbst
fun main() {
// Bereitgestellter Ein-/Ausgabe-Code: belasse ihn wie er ist
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())
}
Alle Lektionen in Objektorientierte Programmierung
1Klassen und Objekte
Arbeiten mit DateienKlassen definierenPrimärkonstruktoreninit-Blöcke und ValidierungSekundärkonstruktorenRückblick – Bibliotheksausweis4Vererbung
Offene Klassen und UnterklassenÜberschreiben von Membernsuper und KonstruktorenAbstrakte KlassenRückblick – Mitarbeiterverzeichnis2Eigenschaften und Kapselung
Benutzerdefinierte ZugriffsmethodenSichtbarkeitsmodifikatorenPrivate Setterlazy und lateinitWiederholung – Bankkonto5Schnittstellen
Schnittstellen deklarierenStandardmethodenMehrere SchnittstellenSchnittstellen als TypenRückblick – Zahlungsmethoden8Generics
Generische FunktionenGenerische KlassenTypbeschränkungenVarianz mit in und outRückblick – Prioritätswarteschlange11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Kotlin-Playground