Menu
Coddy logo textTech

Tekrar - Ödeme Yöntemleri

Coddy'nin Ruby Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 36 / 57.

challenge icon

Görev

Zor

Polimorfizm, 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

Kendi başına pratik yap: Online Ruby derleyicisi