Resumen: Jerarquía de formas
Parte de la sección Programación Orientada a Objetos del Journey de Lua de Coddy. Lección 36 de 70.
Desafío
Fácil¡Construyamos una jerarquía completa de formas desde cero! Crearás una clase principal Shape de la que heredarán todas las formas; después, crearás las clases secundarias Circle y Square, cada una con sus propias propiedades únicas, aunque compartirán funcionalidades comunes.
Organizarás tu código en cuatro archivos:
Shape.lua: Tu clase base, de la que heredarán todas las formas. Debe tener un constructor:new(color)que almacene el color de la forma y un método:getColor()que lo devuelva. Esta propiedad compartida significa que toda forma, ya sea un círculo o un cuadrado, tendrá un color.Circle.lua: Una clase secundaria que hereda de Shape. Su constructor:new(color, radius)debe llamar al constructor principal para establecer el color y después añadir el radio como atributo único. Incluye un método:describe()que muestre los detalles del círculo.Square.lua: Otra clase secundaria que hereda de Shape. Su constructor:new(color, side)también debe llamar al constructor principal y después almacenar la longitud del lado. Incluye también un método:describe()para los cuadrados.main.lua: Une todos los elementos creando instancias de ambas formas y demostrando que heredan correctamente de Shape mientras mantienen sus propiedades únicas.
Recibirás dos entradas:
- Datos del círculo: color y radio separados por una coma (por ejemplo,
blue,5) - Datos del cuadrado: color y longitud del lado separados por una coma (por ejemplo,
red,4)
En tu archivo principal, crea un Circle y un Square con los valores proporcionados. Después, muestra lo siguiente en líneas separadas:
- Llama a
:describe()en el círculo - Llama a
:describe()en el cuadrado - Muestra el color del círculo usando
:getColor() - Muestra el color del cuadrado usando
:getColor()
El método :describe() de Circle debe mostrar:
Circle with radius {radius}El método :describe() de Square debe mostrar:
Square with side {side}Por ejemplo, si las entradas son blue,5 y red,4, la salida debe ser:
Circle with radius 5
Square with side 4
blue
redEsto demuestra el patrón completo de herencia: ambas formas heredan :getColor() de Shape (nunca lo definen por sí mismas), mientras que cada una tiene su propio atributo único y su propio método :describe().
Pruébalo tú mismo
-- main.lua: Reúne todo
local Circle = require('Circle')
local Square = require('Square')
-- Lee la entrada para el círculo (color,radius)
local circleInput = io.read()
local circleColor, circleRadius = circleInput:match("([^,]+),([^,]+)")
circleRadius = tonumber(circleRadius)
-- Lee la entrada para el cuadrado (color,side)
local squareInput = io.read()
local squareColor, squareSide = squareInput:match("([^,]+),([^,]+)")
squareSide = tonumber(squareSide)
-- TODO: Crea una instancia de Circle con el color y el radio dados
-- TODO: Crea una instancia de Square con el color y el lado dados
-- TODO: Llama a :describe() en el círculo
-- TODO: Llama a :describe() en el cuadrado
-- TODO: Imprime el color del círculo usando :getColor()
-- TODO: Imprime el color del cuadrado usando :getColor()
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 formasPractica por tu cuenta: Compilador de Lua online