Powtórka – lista płac pracowników
Część sekcji Programowanie obiektowe ścieżki Ruby w Coddy. Lekcja 26 z 57.
Wyzwanie
ŚredniStwórz system płacowy z dziedziczeniem. Employee.new(name, rate) ma metodę pay(hours) (stawka razy liczba godzin, przy czym godziny powyżej 40 są płatne według stawki 1.5 raza wyższej) oraz line(hours), zwracającą Ada (employee): 800.00, utworzone na podstawie pay(hours) i role, które zwraca employee. Manager.new(name, rate, bonus) przekazuje imię i stawkę do super, dodaje premię do wynagrodzenia z super i ma rolę manager. Contractor < Employee otrzymuje wynagrodzenie obliczane jako stawka razy liczba godzin, bez nadgodzin, i ma rolę contractor.
Dostarczony kod odczytuje wiersze employee Ada 20 40, manager Bo 30 45 500 lub contractor Cy 50 50 (imię, stawka, liczba godzin oraz premia dla menedżerów) i wypisuje dla każdego line(hours), a następnie staff: 3, managers: 1, employees: 3 (obie wartości są zliczane za pomocą is_a?, więc menedżerowie i wykonawcy również są pracownikami) oraz łączne wynagrodzenie.
Umieść swój kod w plikach employee.rb, manager.rb i contractor.rb. main.rb zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
require_relative 'employee'
require_relative 'manager'
require_relative 'contractor'
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
input = []
while (line = gets)
input << line.chomp
end
staff = input.map do |line|
kind, name, rate, hours, bonus = line.split
worker = case kind
when "manager" then Manager.new(name, rate.to_f, bonus.to_f)
when "contractor" then Contractor.new(name, rate.to_f)
else Employee.new(name, rate.to_f)
end
[worker, hours.to_i]
end
staff.each { |worker, hours| puts worker.line(hours) }
managers = staff.count { |w, _| w.is_a?(Manager) }
employees = staff.count { |w, _| w.is_a?(Employee) }
puts "staff: #{staff.size}, managers: #{managers}, employees: #{employees}"
puts format("total: %.2f", staff.sum { |w, h| w.pay(h) })
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasZmienne instancjiMetody i selfto_s i inspectPowtórzenie – karta biblioteczna4Hermetyzacja
Metody prywatneMetody chronionePrywatne setteryOchrona stanuPowtórzenie – automat vendingowy7Polimorfizm i typowanie kacze
PolimorfizmTypowanie kaczeMetody abstrakcyjnecase i klasyPowtórzenie – metody płatności10Wzorce projektowe, część 2
Delegowanie z ForwardableWzorzec dekoratoraWzorzec budowniczegoWzorzec stanu2Metody dostępowe i self
Gettery i setteryWłasne setteryself w metodachTożsamość i równośćPowtórzenie – lista kontaktów5Dziedziczenie
PodklasyNadpisywanie metodWywoływanie superis_a? i przodkowiePowtórka – lista płac pracowników8Metody specjalne
Równość i hashMetody operatorówIndeksowanie i dodawanieWłasne kolekcjePowtórka – ułamki11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Kompilator Ruby online