Menu
Coddy logo textTech

Recapitulação - Papéis de Funcionários

Parte da seção Object Oriented Programming do Journey de Lua da Coddy — lição 42 de 70.

challenge icon

Desafio

Fácil

Vamos construir um sistema de bônus de folha de pagamento que demonstra como diferentes tipos de funcionários podem compartilhar a mesma interface enquanto calculam bônus de forma diferente!

Você criará uma pequena hierarquia de funcionários em quatro arquivos:

  • Employee.lua: Sua classe base que representa um funcionário genérico. O construtor :new(name, salary) deve armazenar tanto o nome quanto o salário do funcionário. Inclua um método :calculateBonus() que retorna 10% do salário (o bônus padrão para funcionários regulares) e um método :getName() para recuperar o nome.
  • Manager.lua: Uma classe filha que herda de Employee. Gerentes trabalham duro e são recompensados—sobrescreva :calculateBonus() para retornar 20% de seu salário em vez dos 10% padrão.
  • Intern.lua: Outra classe filha que herda de Employee. Estagiários recebem um bônus fixo de 50 independentemente de seu salário—sobrescreva :calculateBonus() para sempre retornar esse valor.
  • main.lua: Reúna tudo! Leia três entradas para nomes de funcionários e três entradas para seus salários. Crie um Manager, um Intern e um Employee regular. Armazene os três em uma tabela, depois percorra-a e imprima o nome de cada pessoa seguido pelo seu bônus calculado.

Você receberá seis entradas:

  1. Nome do Gerente
  2. Salário do Gerente
  3. Nome do Estagiário
  4. Salário do Estagiário
  5. Nome do funcionário regular
  6. Salário do funcionário regular

Para cada funcionário em sua coleção (na ordem: Manager, Intern, Employee), imprima seu nome e bônus neste formato:

{name}: {bonus}

Por exemplo, se as entradas forem Alice, 5000, Bob, 2000, Carol e 3000, a saída deve ser:

Alice: 1000
Bob: 50
Carol: 300

Observe como a mesma chamada :calculateBonus() produz resultados diferentes com base no tipo de cada funcionário—isso é o polimorfismo em ação! O Manager recebe 20% de 5000, o Intern recebe um valor fixo de 50 e o Employee regular recebe 10% de 3000.

Experimente você mesmo

-- main.lua: Reúne tudo

local Employee = require('Employee')
local Manager = require('Manager')
local Intern = require('Intern')

-- Ler entradas
local managerName = io.read()
local managerSalary = tonumber(io.read())
local internName = io.read()
local internSalary = tonumber(io.read())
local employeeName = io.read()
local employeeSalary = tonumber(io.read())

-- TODO: Criar um Manager, um Intern e um Employee regular

-- TODO: Armazenar os três em uma tabela (na ordem: Manager, Intern, Employee)

-- TODO: Percorrer a tabela e imprimir o nome e o bônus de cada pessoa
-- Formato: {name}: {bonus}

Todas as lições de Object Oriented Programming