Menu
Coddy logo textTech

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.

challenge icon

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:

  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 proporcionados. Después, muestra lo siguiente en líneas separadas:

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

Esto 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

Practica por tu cuenta: Compilador de Lua online