Resumen: Jerarquía de formas
Parte de la sección Object Oriented Programming del Journey de Lua de Coddy — lección 36 de 70.
Desafío
Fácil¡Vamos a construir una jerarquía de formas completa desde cero! Crearás una clase padre Shape de la que heredarán todas las formas, luego construirás las clases hijas Circle y Square, cada una con sus propias propiedades únicas pero compartiendo una funcionalidad común.
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 cada forma, ya sea un círculo o un cuadrado, tendrá un color.Circle.lua: Una clase hija que hereda de Shape. Su constructor:new(color, radius)debe llamar al constructor padre para el color y luego añadir el radio como un atributo único. Incluye un método:describe()que imprima los detalles del círculo.Square.lua: Otra clase hija que hereda de Shape. Su constructor:new(color, side)también debe llamar al constructor padre y luego almacenar la longitud del lado. Incluye un método:describe()también para los cuadrados.main.lua: Une todo 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 dados. Luego imprime lo siguiente en líneas separadas:
- Llama a
:describe()en el círculo - Llama a
:describe()en el cuadrado - Imprime el color del círculo usando
:getColor() - Imprime el color del cuadrado usando
:getColor()
El método :describe() para Circle debe imprimir:
Circle with radius {radius}El método :describe() para Square debe imprimir:
Square with side {side}Por ejemplo, si las entradas son blue,5 y red,4, la salida debería ser:
Circle with radius 5
Square with side 4
blue
redEsto demuestra el patrón de herencia completo: ambas formas heredan :getColor() de Shape (nunca lo definen ellas mismas), ¡mientras que cada una tiene su propio atributo único y su método :describe()!
Pruébalo tú mismo
-- main.lua: Unir todo
local Circle = require('Circle')
local Square = require('Square')
-- Leer entrada para el círculo (color,radio)
local circleInput = io.read()
local circleColor, circleRadius = circleInput:match("([^,]+),([^,]+)")
circleRadius = tonumber(circleRadius)
-- Leer entrada para el cuadrado (color,lado)
local squareInput = io.read()
local squareColor, squareSide = squareInput:match("([^,]+),([^,]+)")
squareSide = tonumber(squareSide)
-- TODO: Crear una instancia de Circle con el color y radio dados
-- TODO: Crear una instancia de Square con el color y lado dados
-- TODO: Llamar a :describe() en el círculo
-- TODO: Llamar a :describe() en el cuadrado
-- TODO: Imprimir el color del círculo usando :getColor()
-- TODO: Imprimir el color del cuadrado usando :getColor()
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 formas