Menu
Coddy logo textTech

Método de perímetro

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

challenge icon

Desafío

Fácil

Ampliemos nuestro Gestor de Formas añadiendo un método :getPerimeter() tanto a la clase Rectangle como a la clase Circle. Al igual que :getArea(), cada forma calcula su perímetro de manera diferente, pero comparten el mismo nombre de método—un ejemplo perfecto de polimorfismo en acción.

Continuarás trabajando con tus archivos existentes:

  • Shape.lua: Tu clase base Shape permanece sin cambios.
  • Rectangle.lua: Añade un método :getPerimeter() que devuelva el perímetro del rectángulo usando la fórmula 2 × (width + height).
  • Circle.lua: Añade un método :getPerimeter() que devuelva la circunferencia del círculo usando la fórmula 2 × π × radius. Usa math.pi para π.
  • main.lua: Requiere ambos módulos de formas, lee las dimensiones de la entrada, crea un Rectangle y un Circle, luego imprime seis líneas: el nombre, área y perímetro del rectángulo, seguidos por el nombre, área y perímetro del círculo.

Ambas formas tienen ahora una interfaz completa con :getName(), :getArea() y :getPerimeter()—todos accesibles a través de los mismos nombres de métodos a pesar de tener diferentes implementaciones.

Entrada: Tres líneas—width (número), height (número) y radius (número).

Salida: Seis líneas en orden: nombre del rectángulo, área del rectángulo, perímetro del rectángulo, nombre del círculo, área del círculo, perímetro del círculo.

Pruébalo tú mismo

-- Requerir el módulo Rectangle
local Rectangle = require('Rectangle')

-- Requerir el módulo Circle
local Circle = require('Circle')

-- Leer el ancho y el alto de la entrada
local width = tonumber(io.read())
local height = tonumber(io.read())
local radius = tonumber(io.read())

-- Crear una nueva instancia de Rectangle con las dimensiones dadas
local rect = Rectangle:new(width, height)

-- Crear una nueva instancia de Circle con el radio dado
local circ = Circle:new(radius)

-- Imprimir el nombre, el área y el perímetro del rectángulo
print(rect:getName())
print(rect:getArea())
print(rect:getPerimeter())

-- Imprimir el nombre, el área y el perímetro del círculo
print(circ:getName())
print(circ:getArea())
print(circ:getPerimeter())

Todas las lecciones de Object Oriented Programming