Verificación final de OOP
Parte de la sección Programación Orientada a Objetos del Journey de Lua de Coddy. Lección 70 de 70.
Desafío
Fácil¡Reunamos todo lo que has aprendido sobre la POO en Lua! Construirás un sistema de vehículos que demuestra la herencia, la encapsulación mediante convenciones de nombres 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_speedprivado por convención (inicializado en 0). Incluye un getter:getName(), un getter:getSpeed()y un setter:setSpeed(value)que rechaza los valores negativos (si es negativo, imprimeSpeed cannot be negativey no cambia el valor). Añade un método:describe()que devuelve"{name} moving at {speed}".Refuelable.lua: Una tabla mixin que contiene comportamiento relacionado con el combustible. Incluye un método:refuel(amount)que suma aself._fuely un método:getFuel()que devuelve el nivel de combustible actual.Car.lua: Hereda de Vehicle y utiliza el mixin Refuelable. El constructor acepta unnamee inicializa_fuelen 0. Sobrescribe:describe()para que devuelva"{name} moving at {speed}, fuel: {fuel}". Aplica el mixin Refuelable para proporcionar capacidades de combustible a los automóviles.Bicycle.lua: Hereda únicamente de Vehicle: no necesita funcionalidad de combustible. El constructor acepta solo unname. Las bicicletas utilizan el método heredado:describe()sin modificaciones.main.lua: ¡Reúne todo! Crea un automóvil y una bicicleta a partir de 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 automóvil
- Nombre de la bicicleta
- Velocidad que se establecerá para ambos vehículos (un número)
- Cantidad de combustible que se añadirá al automóvil (un número)
En tu archivo principal:
- Crea un automóvil y una bicicleta con los nombres indicados
- Establece la velocidad de ambos vehículos utilizando la tercera entrada
- Reposta el automóvil con la cuarta entrada
- Imprime la descripción del automóvil
- 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 automóviles necesitan combustible) y la encapsulación protege la integridad de los datos (validación de la velocidad). ¡Cada técnica cumple un propósito diferente en tu diseño!
Pruébalo tú mismo
-- main.lua: Reúne 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: Crea un coche con el nombre dado
-- TODO: Crea una bicicleta con el nombre dado
-- TODO: Establece la velocidad para ambos vehículos
-- TODO: Reposta el coche con la cantidad de combustible
-- TODO: Imprime la descripción del coche
-- TODO: Imprime la descripción de la bicicleta
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ó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 OOPPractica por tu cuenta: Compilador de Lua online