Revisão - Folha de pagamento da equipe
Parte da seção Programação orientada a objetos do Journey de Ruby da Coddy. Lição 26 de 57.
Desafio
MédioCrie uma folha de pagamento com herança. Employee.new(name, rate) tem pay(hours) (taxa multiplicada pelas horas, com as horas acima de 40 pagas a 1,5 vezes a taxa) e line(hours), que retorna Ada (employee): 800.00, construído a partir de pay(hours) e role, onde role retorna employee. Manager.new(name, rate, bonus) passa name e rate para super, adiciona o bônus ao pagamento de super e tem a função manager. Contractor < Employee recebe a taxa multiplicada pelas horas, sem hora extra, e tem a função contractor.
O código fornecido lê linhas employee Ada 20 40, manager Bo 30 45 500 ou contractor Cy 50 50 (nome, taxa, horas e um bônus para gerentes) e imprime line(hours) para cada uma; em seguida, imprime staff: 3, managers: 1, employees: 3 (todos contados com is_a?, portanto gerentes e prestadores de serviço também são funcionários) e o pagamento total.
Seu código deve ficar em employee.rb, manager.rb e contractor.rb. main.rb contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
require_relative 'employee'
require_relative 'manager'
require_relative 'contractor'
# Código de entrada/saída fornecido: mantenha-o como está
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) })
Todas as lições de Programação orientada a objetos
1Classes e Objetos
Trabalhando com ArquivosDefinindo ClassesVariáveis de InstânciaMétodos e selfto_s e inspectRevisão - Cartão da Biblioteca4Encapsulamento
Métodos privadosMétodos protegidosSetters privadosProtegendo o estadoRevisão - Máquina de venda automática7Polimorfismo e Duck Typing
PolimorfismoDuck TypingMétodos Abstratoscase e ClassesRevisão - Métodos de Pagamento2Acessores e self
Leitores e GravadoresSetters Personalizadosself nos MétodosIdentidade e IgualdadeRecapitulação - Lista de Contatos5Herança
SubclassesSobrescrita de métodosChamando superis_a? e ancestraisRevisão - Folha de pagamento da equipe8Métodos Especiais
Igualdade e hashMétodos de OperadoresIndexação e AdiçãoColeções PersonalizadasRevisão - Frações11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Compilador de Ruby online