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.
Desafio
FácilVamos 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 de50independentemente 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:
- Nome do Gerente
- Salário do Gerente
- Nome do Estagiário
- Salário do Estagiário
- Nome do funcionário regular
- 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: 300Observe 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
1O Conceito 'Self'
Tabelas com Funções'self' ExplícitoA Sintaxe de Dois-pontosPonto vs Dois-pontosRecapitulação - Movendo o Ponto4Projeto: Banco Digital
Configuração do ProjetoMétodo de Depósito7Polimorfismo e Sobrescrita
Sobrescrita de MétodosChamando Métodos da Classe PaiDuck TypingInterface ComumVerificando o TipoRecapitulação - Papéis de Funcionários10Projeto: Gerenciador de Formas
Configuração do ProjetoClasse Retângulo2Padrão de Protótipo de Classe
O Conceito de ProtótipoVinculando com __indexO Construtor :new()Inicializando AtributosInstâncias IndependentesRecapitulação - Fábrica de Carros5Sobrecarga de Operadores em POO
Somando ObjetosSubtraindo ObjetosConcatenando ObjetosComparando Objetos (<, >)Recapitulação - Matemática de Carteira8Encapsulamento
Convenções de NomenclaturaClosures para PrivacidadeAcesso via ClosuresTabelas Somente LeituraLógica de ValidaçãoRecapitulação - Cofre Seguro11Padrões de Projeto (Lite)
Funções FactoryTabela SingletonPadrão IteratorObserver (Listener)Recapitulação - Logger Factory3Estado e Comportamento do Objeto
Variáveis de InstânciaMétodos GetterMétodos SetterPropriedades CalculadasFormatação de StringsVerificações de IgualdadeRecapitulação - Nota do Aluno6Fundamentos de Herança
Configurando a HerançaHerdando MétodosEstendendo o ConstrutorAdicionando Métodos FilhosCompartilhado vs ÚnicoRecapitulação - Hierarquia de Formas