Bãi đỗ xe
Thuộc phần Lập trình hướng đối tượng trong hành trình Ruby của Coddy. Bài học 55 trên 57.
Thử thách
KhóHãy xây dựng một nhà để xe. Vehicle lưu plate; các lớp con của nó định nghĩa size và hourly_rate: Motorbike có kích thước 1 (nhỏ), giá 1 mỗi giờ, Car có kích thước 2 (vừa), giá 3, còn Van có kích thước 3 (lớn), giá 5. Hằng số SIZES của nhà để xe là %w[small medium large]. Garage.new(small, medium, large) nhận số chỗ đỗ xe cho mỗi kích thước. park(vehicle) đưa xe vào một chỗ trống có kích thước phù hợp, hoặc nếu không còn chỗ trống, vào chỗ có kích thước lớn hơn tiếp theo, rồi trả về parked AB12 in medium hoặc full for AB12. leave(plate, hours) giải phóng chỗ đỗ xe và trả về AB12 paid 9 (giá theo giờ nhân với số giờ, tối thiểu 1 giờ), hoặc no vehicle AB12. status trả về free: small 1, medium 0, large 2.
Code được cung cấp đọc số chỗ theo thứ tự small,medium,large, sau đó đọc các lệnh park car AB12, leave AB12 3 hoặc status, rồi in ra từng phản hồi.
Code của bạn sẽ nằm trong các tệp vehicle.rb, motorbike.rb, car.rb, van.rb và garage.rb. main.rb chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.
Tự làm thử
require_relative 'vehicle'
require_relative 'motorbike'
require_relative 'car'
require_relative 'van'
require_relative 'garage'
# Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
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
Tất cả bài học trong Lập trình hướng đối tượng
1Lớp và đối tượng
Làm việc với tệpĐịnh nghĩa lớpBiến instancePhương thức và selfto_s và inspectÔn tập: thẻ thư viện4Tính đóng gói
Phương thức riêng tưPhương thức được bảo vệPhương thức thiết lập riêng tưBảo vệ trạng tháiÔn tập: máy bán hàng tự động7Tính đa hình và duck typing
Tính đa hìnhDuck typingPhương thức trừu tượngcase và lớpÔn tập: phương thức thanh toán2Phương thức truy cập và self
Phương thức đọc và ghiPhương thức gán tùy chỉnhself trong phương thứcĐịnh danh và tính bằng nhauÔn tập: Danh sách liên hệTự luyện tập: Trình biên dịch Ruby online