Menu
Coddy logo textTech

Método de perímetro

Parte de la sección Programación Orientada a Objetos del Journey de Lua de Coddy. Lección 58 de 70.

challenge icon

Desafío

Fácil

Ampliemos nuestro administrador de formas añadiendo un método :getPerimeter() a las clases Rectangle y 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 del polimorfismo en acción.

Seguirá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, y después imprime seis líneas: el nombre, el área y el perímetro del rectángulo, seguidos del nombre, el área y el perímetro del círculo.

Ahora ambas formas tienen una interfaz completa con :getName(), :getArea() y :getPerimeter(): todos son accesibles mediante los mismos nombres de método a pesar de sus 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 y perímetro del círculo.

Pruébalo tú mismo

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

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

-- Lee el ancho y la altura desde la entrada
local width = tonumber(io.read())
local height = tonumber(io.read())
local radius = tonumber(io.read())

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

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

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

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

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de Lua online