Menu
Coddy logo textTech

Resumen: Jerarquía de formas

Parte de la sección Object Oriented Programming del Journey de Lua de Coddy — lección 36 de 70.

challenge icon

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:

  1. Datos del círculo: color y radio separados por una coma (por ejemplo, blue,5)
  2. 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:

  1. Llama a :describe() en el círculo
  2. Llama a :describe() en el cuadrado
  3. Imprime el color del círculo usando :getColor()
  4. 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
red

Esto 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