Repaso - Roles de empleados
Parte de la sección Object Oriented Programming del Journey de Lua de Coddy — lección 42 de 70.
Desafío
Fácil¡Vamos a construir un sistema de bonos de nómina que demuestre cómo diferentes tipos de empleados pueden compartir la misma interfaz mientras calculan sus bonos de manera diferente!
Crearás una pequeña jerarquía de empleados a través de cuatro archivos:
Employee.lua: Tu clase base que representa a un empleado genérico. El constructor:new(name, salary)debe almacenar tanto el nombre del empleado como su salario. Incluye un método:calculateBonus()que devuelva el 10% del salario (el bono por defecto para empleados regulares), y un método:getName()para recuperar el nombre.Manager.lua: Una clase hija que hereda de Employee. Los gerentes trabajan duro y son recompensados: sobrescribe:calculateBonus()para devolver el 20% de su salario en lugar del 10% por defecto.Intern.lua: Otra clase hija que hereda de Employee. Los pasantes reciben un bono fijo de50independientemente de su salario: sobrescribe:calculateBonus()para devolver siempre esta cantidad.main.lua: ¡Une todo! Lee tres entradas para los nombres de los empleados y tres entradas para sus salarios. Crea un Manager, un Intern y un Employee regular. Almacena los tres en una tabla, luego recorre la tabla e imprime el nombre de cada persona seguido de su bono calculado.
Recibirás seis entradas:
- Nombre del Manager
- Salario del Manager
- Nombre del Intern
- Salario del Intern
- Nombre del empleado regular
- Salario del empleado regular
Para cada empleado en tu colección (en el orden: Manager, Intern, Employee), imprime su nombre y bono en este formato:
{name}: {bonus}Por ejemplo, si las entradas son Alice, 5000, Bob, 2000, Carol y 3000, la salida debería ser:
Alice: 1000
Bob: 50
Carol: 300Observa cómo la misma llamada a :calculateBonus() produce resultados diferentes según el tipo de cada empleado: ¡eso es el polimorfismo en acción! El Manager recibe el 20% de 5000, el Intern recibe un monto fijo de 50 y el Employee regular recibe el 10% de 3000.
Pruébalo tú mismo
-- main.lua: Reúne todo
local Employee = require('Employee')
local Manager = require('Manager')
local Intern = require('Intern')
-- Leer 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: Crear un Manager, un Intern y un Employee regular
-- TODO: Almacenar los tres en una tabla (en orden: Manager, Intern, Employee)
-- TODO: Recorrer la tabla e imprimir el nombre y el bono de cada persona
-- Formato: {name}: {bonus}
Todas las lecciones de Object Oriented Programming
1El concepto de 'self'
Tablas con funciones'self' explícitoLa sintaxis de dos puntosPunto vs. dos puntosResumen - Punto en movimiento4Proyecto: Banco Digital
Configuración del proyectoMétodo de depósito7Polimorfismo y Sobrescritura
Sobrescritura de métodosLlamar a métodos del padreDuck TypingInterfaz comúnComprobación de tiposRepaso - Roles de empleados2Patrón de prototipo de clase
El concepto de prototipoVinculación con __indexEl constructor :new()Inicialización de atributosInstancias independientesResumen - Fábrica de coches5Sobrecarga de operadores en POO
Sumar objetosRestar objetosConcatenar objetosComparar objetos (<, >)Resumen - Matemáticas de la billetera8Encapsulamiento
Convenciones de nomenclaturaClosures para privacidadAcceso mediante ClosuresTablas de solo lecturaLógica de validaciónResumen - Bóveda segura11Patrones de diseño (Lite)
Funciones FactoryTabla SingletonPatrón IteradorObserver (Listener)Resumen - Logger Factory3Estado y Comportamiento de los Objetos
Variables de InstanciaMétodos GetterMétodos SetterPropiedades CalculadasFormateo de StringsComprobaciones de IgualdadResumen - Calificación del Estudiante6Fundamentos de la herencia
Configuración de la herenciaHerencia de métodosExtender el constructorAñadir métodos hijosCompartido vs. ÚnicoResumen: Jerarquía de formas