Menu
Coddy logo textTech

Método Perímetro

Parte da seção Object Oriented Programming do Journey de Lua da Coddy — lição 58 de 70.

challenge icon

Desafio

Fácil

Vamos estender nosso Gerenciador de Formas adicionando um método :getPerimeter() às classes Rectangle e Circle. Assim como :getArea(), cada forma calcula seu perímetro de maneira diferente, mas elas compartilham o mesmo nome de método — um exemplo perfeito de polimorfismo em ação.

Você continuará trabalhando com seus arquivos existentes:

  • Shape.lua: Sua classe base Shape permanece inalterada.
  • Rectangle.lua: Adicione um método :getPerimeter() que retorne o perímetro do retângulo usando a fórmula 2 × (width + height).
  • Circle.lua: Adicione um método :getPerimeter() que retorne a circunferência do círculo usando a fórmula 2 × π × radius. Use math.pi para π.
  • main.lua: Importe ambos os módulos de forma, leia as dimensões da entrada, crie um Rectangle e um Circle, e então imprima seis linhas: o nome, a área e o perímetro do retângulo, seguidos pelo nome, a área e o perímetro do círculo.

Ambas as formas agora possuem uma interface completa com :getName(), :getArea() e :getPerimeter() — todos acessíveis através dos mesmos nomes de métodos, apesar das diferentes implementações.

Entrada: Três linhas — width (número), height (número) e radius (número).

Saída: Seis linhas em ordem: nome do retângulo, área do retângulo, perímetro do retângulo, nome do círculo, área do círculo, perímetro do círculo.

Experimente você mesmo

-- Requer o módulo Rectangle
local Rectangle = require('Rectangle')

-- Requer o módulo Circle
local Circle = require('Circle')

-- Lê a largura e a altura da entrada
local width = tonumber(io.read())
local height = tonumber(io.read())
local radius = tonumber(io.read())

-- Cria uma nova instância de Rectangle com as dimensões fornecidas
local rect = Rectangle:new(width, height)

-- Cria uma nova instância de Circle com o raio fornecido
local circ = Circle:new(radius)

-- Imprime o nome, a área e o perímetro do retângulo
print(rect:getName())
print(rect:getArea())
print(rect:getPerimeter())

-- Imprime o nome, a área e o perímetro do círculo
print(circ:getName())
print(circ:getArea())
print(circ:getPerimeter())

Todas as lições de Object Oriented Programming