Repaso - Roles de empleados
Parte de la sección Programación Orientada a Objetos del Journey de Lua de Coddy. Lección 42 de 70.
Desafío
Fácil¡Construyamos un sistema de bonificaciones de nómina que demuestre cómo diferentes tipos de empleados pueden compartir la misma interfaz y, al mismo tiempo, calcular las bonificaciones de manera diferente!
Crearás una pequeña jerarquía de empleados distribuida en 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 (la bonificación predeterminada para los empleados regulares) y un método:getName()para obtener el nombre.Manager.lua: Una clase hija que hereda de Employee. Los gerentes trabajan duro y reciben una recompensa: sobrescribe:calculateBonus()para que devuelva el 20 % de su salario en lugar del 10 % predeterminado.Intern.lua: Otra clase hija que hereda de Employee. Los becarios reciben una bonificación fija de50, independientemente de su salario: sobrescribe:calculateBonus()para que siempre devuelva 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, después recórrela e imprime el nombre de cada persona seguido de su bonificación calculada.
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 de tu colección (en el orden: Manager, Intern, Employee), imprime su nombre y su bonificación con 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 :calculateBonus() produce resultados diferentes según el tipo de cada empleado: ¡eso es el polimorfismo en acción! El Manager obtiene el 20 % de 5000, el Intern obtiene una cantidad fija de 50 y el Employee regular obtiene 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')
-- Lee las 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: Crea un Manager, un Intern y un Employee regular
-- TODO: Almacena los tres en una table (en orden: Manager, Intern, Employee)
-- TODO: Recorre la table e imprime el name y el bonus de cada persona
-- Formato: {name}: {bonus}
Todas las lecciones de Programación Orientada a Objetos
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 formasPractica por tu cuenta: Compilador de Lua online