Lịch sự kiện
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 56 trên 57.
Thử thách
KhóHãy xây dựng bộ lập lịch sự kiện bằng các phương thức đặc biệt trong phần này. Event.new(title, day, start, finish) có bộ đọc cho cả bốn thuộc tính. Lớp này bao gồm Comparable và sắp xếp theo ngày, rồi đến giờ bắt đầu, sau đó là tiêu đề. Hai sự kiện được xem là bằng nhau với ==, eql? và hash khi chúng có cùng tiêu đề trong cùng một ngày (cùng một sự kiện được nhập hai lần). to_s trả về day 3 09-11 standup, với giờ gồm hai chữ số. overlaps?(other) trả về đúng nếu hai sự kiện cùng ngày và mỗi sự kiện bắt đầu trước khi sự kiện kia kết thúc. Scheduler#add(event) trả về duplicate nếu có sự kiện bằng nó, conflicts with review nếu có sự kiện đầu tiên đã lưu (theo thứ tự) bị trùng giờ, nếu không thì lưu sự kiện đó và trả về added. Scheduler bao gồm Enumerable; phương thức each lần lượt trả về các sự kiện đã lưu theo thứ tự. busiest_day trả về busiest day 3: 5h, tức ngày có tổng số giờ được lên lịch nhiều nhất (nếu bằng nhau thì chọn ngày sớm hơn), hoặc no events.
Code được cung cấp đọc các sự kiện từ những dòng có định dạng title,day,start,finish và in phản hồi cho từng sự kiện, sau đó in từng sự kiện theo thứ tự thông qua each, rồi in ngày bận nhất.
Viết code của bạn trong event.rb và scheduler.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 'event'
require_relative 'scheduler'
# Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
input = []
while (line = gets)
input << line.chomp
end
scheduler = Scheduler.new
input.each do |line|
title, day, start, finish = line.split(",")
puts scheduler.add(Event.new(title, day.to_i, start.to_i, finish.to_i))
end
scheduler.each { |event| puts event }
puts scheduler.busiest_day
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