مرآب السيارات
جزء من قسم البرمجة كائنية التوجه في رحلة Ruby على Coddy. الدرس 55 من 57.
التحدي
صعبأنشئ مرآبًا للسيارات. تخزّن Vehicle قيمة plate؛ وتعرّف فئاته الفرعية size وhourly_rate: حجم Motorbike هو 1 (صغير) بسعر 1 لكل ساعة، وحجم Car هو 2 (متوسط) بسعر 3، وحجم Van هو 3 (كبير) بسعر 5. ثابت المرآب SIZES هو %w[small medium large]. تستقبل Garage.new(small, medium, large) عدد الأماكن لكل حجم. تضع park(vehicle) مركبةً في مكان شاغر من حجمها، أو من الحجم الأكبر التالي إذا لم يتوفر مكان، وتعيد parked AB12 in medium أو full for AB12. تحرّر leave(plate, hours) المكان وتعيد AB12 paid 9 (السعر مضروبًا في عدد الساعات، بحد أدنى ساعة واحدة)، أو no vehicle AB12. تعيد status القيمة free: small 1, medium 0, large 2.
يقرأ الكود المزوّد الأماكن بالصيغة small,medium,large، ثم يقرأ الأوامر park car AB12 أو leave AB12 3 أو status، ويطبع كل رد.
يجب أن تضع كودك في vehicle.rb وmotorbike.rb وcar.rb وvan.rb وgarage.rb. يحتوي main.rb على كود الإدخال/الإخراج المزوّد، ولا يمكن تعديله.
جرّب بنفسك
require_relative 'vehicle'
require_relative 'motorbike'
require_relative 'car'
require_relative 'van'
require_relative 'garage'
# كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
input = []
while (line = gets)
input << line.chomp
end
small, medium, large = input[0].split(",").map(&:to_i)
garage = Garage.new(small, medium, large)
kinds = { "bike" => Motorbike, "car" => Car, "van" => Van }
input.drop(1).each do |cmd|
parts = cmd.split
case parts[0]
when "park" then puts garage.park(kinds[parts[1]].new(parts[2]))
when "leave" then puts garage.leave(parts[1], parts[2].to_i)
else puts garage.status
end
end
جميع دروس البرمجة كائنية التوجه
1الفئات والكائنات
العمل مع الملفاتتعريف الفئاتمتغيرات النسخةالأساليب و selfto_s و inspectمراجعة - بطاقة المكتبة7تعدد الأشكال والكتابة بأسلوب البطة
تعدد الأشكالالكتابة بأسلوب البطةالأساليب المجردةالحالات والفئاتمراجعة - طرق الدفع3أساليب ومتغيرات الأصناف
أساليب الأصنافمتغيرات كائنات الأصنافالثوابتأساليب الإنشاءمراجعة - رموز القسائمتدرّب بنفسك: مترجم Ruby عبر الإنترنت