Menu
Coddy logo textTech

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

Parte da seção Programação Orientada a Objetos do Journey de Lua da Coddy. Lição 42 de 70.

challenge icon

Desafio

Fácil

Vamos criar 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 maneiras diferentes!

Você criará uma pequena hierarquia de funcionários distribuída por quatro arquivos:

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

Você receberá seis entradas:

  1. Nome do Manager
  2. Salário do Manager
  3. Nome do Intern
  4. Salário do Intern
  5. Nome do funcionário comum
  6. Salário do funcionário comum

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 deverá 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 é polimorfismo em ação! O Manager recebe 20% de 5000, o Intern recebe um valor fixo de 50 e o Employee comum recebe 10% de 3000.

Experimente você mesmo

-- main.lua: Junte 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: Crie um Manager, um Intern e um Employee regular

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

-- TODO: Percorra a table e imprima o nome e o bônus de cada pessoa
-- Formato: {name}: {bonus}

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de Lua online