Verificación final de OOP
Parte de la sección Object Oriented Programming del Journey de Lua de Coddy — lección 70 de 70.
Desafío
Fácil¡Vamos a reunir todo lo que has aprendido sobre la POO en Lua! Construirás un sistema de vehículos que demuestre la herencia, la encapsulación a través de convenciones de nomenclatura y los mixins para capacidades opcionales.
Organizarás tu código en cinco archivos:
Vehicle.lua: La clase base para todos los vehículos. Cada vehículo tiene unnamey un_speedpor convención privada (inicializado en 0). Incluye un getter:getName(), un getter:getSpeed()y un setter:setSpeed(value)que rechace valores negativos (si es negativo, imprime"Speed cannot be negative"y no cambies el valor). Añade un método:describe()que devuelva"{name} moving at {speed}".Refuelable.lua: Una tabla mixin que contiene el comportamiento relacionado con el combustible. Incluye un método:refuel(amount)que sume aself._fuel, y un método:getFuel()que devuelva el nivel de combustible actual.Car.lua: Hereda de Vehicle y utiliza el mixin Refuelable. El constructor acepta unnamee inicializa_fuela 0. Sobrescribe:describe()para devolver"{name} moving at {speed}, fuel: {fuel}". Aplica el mixin Refuelable para dar a los coches capacidades de combustible.Bicycle.lua: Hereda solo de Vehicle; no se necesita funcionalidad de combustible. El constructor acepta solo unname. Las bicicletas utilizan el método:describe()heredado sin modificaciones.main.lua: ¡Reúne todo! Crea un coche y una bicicleta basados en las entradas, demuestra sus diferentes capacidades y muestra cómo comparten el comportamiento común de los vehículos mientras tienen características distintas.
Recibirás cuatro entradas:
- Nombre del coche
- Nombre de la bicicleta
- Velocidad a establecer para ambos vehículos (un número)
- Cantidad de combustible a añadir al coche (un número)
En tu archivo principal:
- Crea un coche y una bicicleta con los nombres dados
- Establece la velocidad para ambos vehículos usando la tercera entrada
- Recarga combustible al coche con la cuarta entrada
- Imprime la descripción del coche
- Imprime la descripción de la bicicleta
Por ejemplo, si las entradas son "Sedan", "Mountain Bike", "60" y "45", la salida debería ser:
Sedan moving at 60, fuel: 45
Mountain Bike moving at 60Si las entradas son "Sports Car", "Road Bike", "120" y "80", la salida debería ser:
Sports Car moving at 120, fuel: 80
Road Bike moving at 120Este desafío muestra cómo la herencia proporciona un comportamiento compartido (ambos vehículos pueden moverse), los mixins añaden capacidades opcionales (solo los coches necesitan combustible) y la encapsulación protege la integridad de los datos (validación de velocidad). ¡Cada técnica sirve para un propósito diferente en tu diseño!
Pruébalo tú mismo
-- main.lua: Unir todo
local Car = require('Car')
local Bicycle = require('Bicycle')
-- Leer entradas
local carName = io.read()
local bicycleName = io.read()
local speed = tonumber(io.read())
local fuelAmount = tonumber(io.read())
-- TODO: Crear un coche con el nombre dado
-- TODO: Crear una bicicleta con el nombre dado
-- TODO: Establecer la velocidad para ambos vehículos
-- TODO: Reabastecer el coche con la cantidad de combustible
-- TODO: Imprimir la descripción del coche
-- TODO: Imprimir la descripción de la bicicleta
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ósito2Patró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 formas9Composición y Mixins
Relación "Tiene-Un"DelegaciónMixins simplesAplicación de múltiples MixinsMixins vs. HerenciaResumen - Ensamblaje de robots12Desafíos finales
Repaso - Sistema de inventarioRepaso - Gestor de usuariosRepaso - Seguimiento de puntuaciónVerificación final de OOP