Menu
Coddy logo textTech

Classe Círculo

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

challenge icon

Desafio

Fácil

Vamos continuar construindo nosso Gerenciador de Formas adicionando uma classe Circle ao lado do Retângulo que você criou na lição anterior.

Você trabalhará com quatro arquivos para manter suas formas organizadas:

  • Shape.lua: Sua classe base Shape com :new(name) e :getName().
  • Rectangle.lua: Sua classe Rectangle do desafio anterior com :getArea().
  • Circle.lua: Crie uma classe Circle que herda de Shape. O construtor deve aceitar um radius, chamar o construtor pai com o nome "Circle" e armazenar o raio. Adicione um método :getArea() que calcula a área do círculo usando a fórmula πr². Use math.pi para o valor de π.
  • main.lua: Requeira ambos os módulos Rectangle e Circle. Leia três valores da entrada: a largura de um retângulo, a altura de um retângulo e o raio de um círculo. Crie uma instância de cada forma e imprima quatro linhas — o nome do retângulo, a área do retângulo, o nome do círculo e a área do círculo.

Ambas as formas agora compartilham a mesma interface através da herança — cada uma possui um método :getName() de Shape e sua própria implementação de :getArea(). Essa interface comum se tornará útil nas próximas lições.

Entrada: Três linhas — largura (número), altura (número) e raio (número).

Saída: Quatro linhas — nome do retângulo, área do retângulo, nome do círculo, área do círculo.

Experimente você mesmo

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

-- Requer o módulo Circle
-- TODO: Requerer o módulo Circle aqui

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

-- TODO: Ler o raio da entrada

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

-- TODO: Criar uma nova instância de Circle com o raio fornecido

-- Imprime o nome e a área do retângulo
print(rect:getName())
print(rect:getArea())

-- TODO: Imprimir o nome e a área do círculo

Todas as lições de Object Oriented Programming