Ringkasan: Method Pembayaran
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Ruby di Coddy. Pelajaran 36 dari 57.
Tantangan
SulitBuat checkout dengan polimorfisme, method abstrak, dan duck typing. PaymentMethod#charge(amount) adalah template method: method ini mengembalikan nil saat available?(amount) bernilai false, dan jika tidak, mengembalikan card paid 50.00, fee 1.00, menggunakan label dan fee(amount) yang abstrak, yang memunculkan NotImplementedError di PaymentMethod. available? adalah hook yang mengembalikan true. Card mengenakan biaya 2%; PayPal mengenakan 0.30 ditambah 3%; GiftCard.new(balance) tidak mengenakan biaya, hanya tersedia selama saldonya cukup untuk membayar jumlah tersebut, dan mengurangi saldo. Voucher.new(value) bukan PaymentMethod: voucher ini hanya memiliki charge(amount) sendiri, yang mengembalikan voucher covered 20.00 saat nilainya cukup untuk membayar jumlah tersebut, dan nil jika tidak. Fungsi helper checkout(amount, methods) di functions.rb mencoba method setiap metode secara berurutan dan mengembalikan hasil pertama, atau declined.
Baris input pertama mencantumkan metode pembayaran, seperti gift:30,voucher:20,card. Setiap baris berikutnya berisi jumlah pesanan; kode yang disediakan mencetak hasil checkout untuk setiap pesanan.
Tulis kodemu di payment_method.rb, card.rb, pay_pal.rb, gift_card.rb, voucher.rb, dan functions.rb. main.rb berisi kode input/output yang disediakan dan tidak boleh diedit.
Coba sendiri
require_relative 'payment_method'
require_relative 'card'
require_relative 'pay_pal'
require_relative 'gift_card'
require_relative 'voucher'
require_relative 'functions'
# Kode input/output yang disediakan: biarkan apa adanya
input = []
while (line = gets)
input << line.chomp
end
methods = input[0].split(",").map do |entry|
kind, value = entry.split(":")
case kind
when "card" then Card.new
when "paypal" then PayPal.new
when "gift" then GiftCard.new(value.to_f)
else Voucher.new(value.to_f)
end
end
input.drop(1).each { |line| puts checkout(line.to_f, methods) }
Semua pelajaran di Pemrograman Berorientasi Objek
1class dan object
Bekerja dengan fileMendefinisikan classVariabel instansmethod dan selfto_s dan inspectRingkasan: Kartu Perpustakaan4Enkapsulasi
private methodprotected methodprivate setterMelindungi StatusUlasan, Mesin Penjual Otomatis7Polimorfisme dan Duck Typing
PolimorfismeDuck TypingMethod Abstrakcase dan classRingkasan: Method Pembayaran2Accessor dan self
Pembaca dan PenulisSetter Kustomself dalam methodIdentitas dan KesetaraanRangkuman: Daftar Kontak8Special method
Kesetaraan dan hashOperator methodPengindeksan dan penambahanKoleksi kustomRingkasan: Pecahan11Proyek: Manajemen Perpustakaan
Buku dan AnggotaMeminjam Buku3Method dan Variabel class
Method classVariabel instance classKonstantaMethod pabrikRangkuman: Kode KuponLatihan sendiri: Compiler Ruby online