مراجعة - طرق الدفع
جزء من قسم البرمجة كائنية التوجه في رحلة Ruby على Coddy. الدرس 36 من 57.
التحدي
صعبأنشئ عملية دفع باستخدام تعدد الأشكال، وطريقة مجردة، وكتابة البطّة. PaymentMethod#charge(amount) هي طريقة قالب: تُرجع nil عندما تكون available?(amount) تساوي false، وإلا فتُرجع card paid 50.00, fee 1.00، باستخدام label والطريقة المجردة fee(amount)، التي ترفع NotImplementedError في PaymentMethod. available? هي نقطة امتداد تُرجع true. تفرض Card رسماً بنسبة 2%؛ وPayPal رسماً قدره 0.30 بالإضافة إلى 3%؛ أما GiftCard.new(balance) فلا يفرض أي رسم، ويكون متاحاً فقط ما دام رصيده يغطي المبلغ، ويُقلّل الرصيد. Voucher.new(value) ليس PaymentMethod؛ إذ يملك فقط charge(amount) الخاص به، ويُرجع voucher covered 20.00 عندما تغطي القيمة المبلغ، وnil خلاف ذلك. يحاول المساعد checkout(amount, methods) في functions.rb استدعاء charge لكل طريقة بالترتيب، ويُرجع أول نتيجة، أو declined.
يسرد سطر الإدخال الأول طرق الدفع، مثل gift:30,voucher:20,card. وكل سطر تالٍ هو مبلغ طلب؛ وتطبع الشيفرة الموفّرة نتيجة checkout لكل مبلغ.
ضع شيفرتك في payment_method.rb وcard.rb وpay_pal.rb وgift_card.rb وvoucher.rb وfunctions.rb. يحتوي main.rb على شيفرة الإدخال/الإخراج الموفّرة، ولا يمكن تعديله.
جرّب بنفسك
require_relative 'payment_method'
require_relative 'card'
require_relative 'pay_pal'
require_relative 'gift_card'
require_relative 'voucher'
require_relative 'functions'
# كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
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) }
جميع دروس البرمجة كائنية التوجه
1الفئات والكائنات
العمل مع الملفاتتعريف الفئاتمتغيرات النسخةالأساليب و selfto_s و inspectمراجعة - بطاقة المكتبة7تعدد الأشكال والكتابة بأسلوب البطة
تعدد الأشكالالكتابة بأسلوب البطةالأساليب المجردةالحالات والفئاتمراجعة - طرق الدفع3أساليب ومتغيرات الأصناف
أساليب الأصنافمتغيرات كائنات الأصنافالثوابتأساليب الإنشاءمراجعة - رموز القسائمتدرّب بنفسك: مترجم Ruby عبر الإنترنت