Tekrar - Ödeme Yöntemleri
Coddy'nin Ruby Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 36 / 57.
Görev
ZorPolimorfizm, soyut bir yöntem ve duck typing kullanarak bir ödeme işlemi oluşturun. PaymentMethod#charge(amount) bir şablon yöntemidir: available?(amount) false olduğunda nil döndürür; aksi takdirde label ve PaymentMethod içinde NotImplementedError yükselten soyut fee(amount) yöntemini kullanarak card paid 50.00, fee 1.00 döndürür. available?, true döndüren bir kancadır. Card %2 ücret uygular; PayPal 0.30 artı %3 ücret uygular; GiftCard.new(balance) ücret almaz, yalnızca bakiyesi tutarı karşıladığı sürece kullanılabilir ve bakiyeyi azaltır. Voucher.new(value) bir PaymentMethod değildir: yalnızca kendine ait charge(amount) yöntemine sahiptir; değer tutarı karşıladığında voucher covered 20.00, aksi takdirde nil döndürür. functions.rb içindeki checkout(amount, methods) yardımcı yöntemi, her yöntemin charge yöntemini sırayla dener ve ilk sonucu veya declined döndürür.
İlk girdi satırı, gift:30,voucher:20,card gibi ödeme yöntemlerini listeler. Sonraki her satır bir sipariş tutarıdır; sağlanan kod her biri için checkout sonucunu yazdırır.
Kodunuz payment_method.rb, card.rb, pay_pal.rb, gift_card.rb, voucher.rb ve functions.rb dosyalarına yazılmalıdır. main.rb sağlanan girdi/çıktı kodunu içerir ve düzenlenemez.
Kendin dene
require_relative 'payment_method'
require_relative 'card'
require_relative 'pay_pal'
require_relative 'gift_card'
require_relative 'voucher'
require_relative 'functions'
# Sağlanan girdi/çıktı kodu: olduğu gibi bırakın
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) }
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Sınıflar ve Nesneler
Dosyalarla ÇalışmaSınıf TanımlamaÖrnek DeğişkenleriMetotlar ve selfto_s ve inspectÖzet - Kütüphane Kartı7Çok Biçimlilik ve Ördek Tiplemesi
Çok BiçimlilikÖrdek TiplemesiSoyut Metotlarcase ve SınıflarTekrar - Ödeme Yöntemleri2Erişimciler ve self
Okuyucular ve YazıcılarÖzel Setter'larMetotlarda selfKimlik ve EşitlikTekrar - Kişi Listesi5Kalıtım
Alt sınıflarMetotları geçersiz kılmasuper çağrısıis_a? ve üst sınıflarTekrar - Personel Maaşları8Özel Metotlar
Eşitlik ve hashOperatör Metotlarıİndeksleme ve EklemeÖzel KoleksiyonlarTekrar - Kesirler11Proje: Kütüphane Yönetimi
Kitaplar ve ÜyelerKitap Ödünç Alma3Sınıf Metotları ve Değişkenleri
Sınıf MetotlarıSınıf Örnek DeğişkenleriSabitlerFabrika MetotlarıTekrar - Kupon KodlarıKendi başına pratik yap: Online Ruby derleyicisi