Veranstaltungsplaner
Teil des Abschnitts Objektorientierte Programmierung der Ruby-Journey von Coddy. Lektion 56 von 57.
Aufgabe
SchwerErstelle mit den speziellen Methoden dieses Abschnitts einen Ereignisplaner. Event.new(title, day, start, finish) verfügt über Zugriffsmethoden für alle vier Werte. Die Klasse bindet Comparable ein und sortiert nach Tag, dann Startstunde und dann Titel. Zwei Ereignisse sind mit ==, eql? und hash gleich, wenn sie am selben Tag denselben Titel haben (dasselbe Ereignis wurde zweimal eingegeben). to_s gibt day 3 09-11 standup mit zweistelligen Stunden zurück. overlaps?(other) ist am selben Tag wahr, wenn jedes Ereignis vor dem Ende des jeweils anderen beginnt. Scheduler#add(event) gibt duplicate für ein gleiches Ereignis zurück, conflicts with review für das erste gespeicherte Ereignis (in der Reihenfolge), das sich überschneidet, und speichert es andernfalls und gibt added zurück. Scheduler bindet Enumerable ein; sein each liefert die gespeicherten Ereignisse in der Reihenfolge. busiest_day gibt busiest day 3: 5h zurück, also den Tag mit den meisten geplanten Stunden (bei Gleichstand den früheren Tag), oder no events.
Der bereitgestellte Code liest Ereignisse als Zeilen im Format title,day,start,finish ein und gibt für jedes Ereignis die Antwort aus, anschließend jedes Ereignis in der Reihenfolge über each sowie den Tag mit den meisten Ereignissen.
Dein Code gehört in event.rb und scheduler.rb. main.rb enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.
Probier es selbst
require_relative 'event'
require_relative 'scheduler'
# Gelieferter Ein-/Ausgabe-Code: belasse ihn wie er ist
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
Alle Lektionen in Objektorientierte Programmierung
1Klassen und Objekte
Arbeiten mit DateienKlassen definierenInstanzvariablenMethoden und selfto_s und inspectRückblick – Bibliotheksausweis4Kapselung
Private MethodenGeschützte MethodenPrivate SetterZustand schützenRückblick – Verkaufsautomat7Polymorphismus und Duck Typing
PolymorphismusDuck TypingAbstrakte MethodenFälle und KlassenRückblick – Zahlungsmethoden2Getter und Setter sowie self
Leser und SchreiberBenutzerdefinierte Setterself in MethodenIdentität und GleichheitWiederholung – Kontaktliste5Vererbung
UnterklassenMethoden überschreibensuper aufrufenis_a? und VorfahrenRückblick – Gehaltsabrechnung des Personals8Spezielle Methoden
Gleichheit und HashOperator-MethodenIndexieren und AnhängenBenutzerdefinierte CollectionsRückblick – Brüche11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Online-Ruby-Compiler