مرآب السيارات
جزء من قسم البرمجة كائنية التوجه في رحلة Swift على Coddy. الدرس 55 من 57.
التحدي
صعبأنشئ مرآبًا للسيارات. يحتوي البروتوكول Vehicle على plate وsize (وهو تعداد Size: Int, Comparable مع small = 1 وmedium = 2 وlarge = 3) وhourlyRate. نفّذ Motorbike (صغير، 1 لكل ساعة) وCar (متوسط، 3) وVan (كبير، 5). يُنشأ الصنف Garage بعدد من الأماكن لكل حجم. تضع park(_:) مركبةً في مكان شاغر من حجمها، أو، إذا لم يتوفر مكان، في مكان من الحجم الأكبر التالي، وتُرجع 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، ويطبع كل استجابة.
ضع الكود الخاص بك في Size.swift وVehicle.swift وMotorbike.swift وCar.swift وVan.swift وGarage.swift. يحتوي main.swift على كود الإدخال/الإخراج المزوَّد، ولا يمكن تعديله.
جرّب بنفسك
// كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
var input: [String] = []
while let line = readLine() { input.append(line) }
let s = input[0].split(separator: ",").map { Int($0)! }
let garage = Garage(small: s[0], medium: s[1], large: s[2])
for cmd in input.dropFirst() {
let p = cmd.split(separator: " ").map(String.init)
switch p[0] {
case "park":
let v: any Vehicle
switch p[1] {
case "bike": v = Motorbike(plate: p[2])
case "van": v = Van(plate: p[2])
default: v = Car(plate: p[2])
}
print(garage.park(v))
case "leave": print(garage.leave(plate: p[1], hours: Int(p[2])!))
default: print(garage.status())
}
}
جميع دروس البرمجة كائنية التوجه
1الأصناف والكائنات
العمل مع الملفاتتعريف الأصنافالأساليب وselfالمُهيِّئاتالأصناف هي مراجعمراجعة - بطاقة المكتبة4التغليف
التحكم في الوصولللقراءة فقط من الخارجحماية الحالةالمهيئات القابلة للفشلمراجعة - الحساب البنكي7تعدد الأشكال والأنواع العامة
تعدد الأشكالتحويل الأنواعالدوال العامةالأنواع العامةمراجعة - حاسبة الأشكالتدرّب بنفسك: Playground لـ Swift