Menu
Coddy logo textTech

Recapitulação - Hierarquia de Formas

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

challenge icon

Desafio

Fácil

Vamos construir uma hierarquia completa de formas do zero! Você criará uma classe pai Shape da qual todas as formas herdam, depois construirá as classes filhas Circle e Square, cada uma com suas próprias propriedades únicas, enquanto compartilham funcionalidades comuns.

Você organizará seu código em quatro arquivos:

  • Shape.lua: Sua classe base da qual todas as formas herdarão. Ela deve ter um construtor :new(color) que armazena a cor da forma, e um método :getColor() que a retorna. Essa propriedade compartilhada significa que cada forma — seja círculo ou quadrado — terá uma cor.
  • Circle.lua: Uma classe filha que herda de Shape. Seu construtor :new(color, radius) deve chamar o construtor pai para a cor e, em seguida, adicionar o raio como um atributo único. Inclua um método :describe() que imprime os detalhes do círculo.
  • Square.lua: Outra classe filha que herda de Shape. Seu construtor :new(color, side) também deve chamar o construtor pai e, em seguida, armazenar o comprimento do lado. Inclua um método :describe() para quadrados também.
  • main.lua: Reúna tudo criando instâncias de ambas as formas e demonstrando que elas herdam corretamente de Shape enquanto mantêm suas propriedades únicas.

Você receberá duas entradas:

  1. Dados do círculo: cor e raio separados por uma vírgula (ex: blue,5)
  2. Dados do quadrado: cor e comprimento do lado separados por uma vírgula (ex: red,4)

No seu arquivo principal, crie um Circle e um Square com os valores fornecidos. Em seguida, imprima o seguinte em linhas separadas:

  1. Chame :describe() no círculo
  2. Chame :describe() no quadrado
  3. Imprima a cor do círculo usando :getColor()
  4. Imprima a cor do quadrado usando :getColor()

O método :describe() para Circle deve imprimir:

Circle with radius {radius}

O método :describe() para Square deve imprimir:

Square with side {side}

Por exemplo, se as entradas forem blue,5 e red,4, a saída deve ser:

Circle with radius 5
Square with side 4
blue
red

Isso demonstra o padrão completo de herança: ambas as formas herdam :getColor() de Shape (elas nunca o definem por si mesmas), enquanto cada uma tem seu próprio atributo único e método :describe()!

Experimente você mesmo

-- main.lua: Reúne tudo

local Circle = require('Circle')
local Square = require('Square')

-- Lê a entrada para o círculo (cor,raio)
local circleInput = io.read()
local circleColor, circleRadius = circleInput:match("([^,]+),([^,]+)")
circleRadius = tonumber(circleRadius)

-- Lê a entrada para o quadrado (cor,lado)
local squareInput = io.read()
local squareColor, squareSide = squareInput:match("([^,]+),([^,]+)")
squareSide = tonumber(squareSide)

-- TODO: Criar uma instância de Circle com a cor e o raio fornecidos

-- TODO: Criar uma instância de Square com a cor e o lado fornecidos

-- TODO: Chamar :describe() no círculo

-- TODO: Chamar :describe() no quadrado

-- TODO: Imprimir a cor do círculo usando :getColor()

-- TODO: Imprimir a cor do quadrado usando :getColor()

Todas as lições de Object Oriented Programming