Menu
Coddy logo textTech

Recapitulação - Hierarquia de Formas

Parte da seção Programação Orientada a Objetos do Journey de Lua da Coddy. Lição 36 de 70.

challenge icon

Desafio

Fácil

Vamos criar uma hierarquia completa de formas do zero! Você criará uma classe-pai Shape da qual todas as formas herdarão e, em seguida, criará as classes-filhas Circle e Square, cada uma com suas próprias propriedades exclusivas, compartilhando ao mesmo tempo 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 toda forma, seja um círculo ou um quadrado, terá uma cor.
  • Circle.lua: uma classe-filha que herda de Shape. Seu construtor :new(color, radius) deve chamar o construtor da classe-pai para a cor e, em seguida, adicionar o raio como um atributo exclusivo. Inclua um método :describe() que exiba 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 da classe-pai e, em seguida, armazenar o comprimento do lado. Inclua também um método :describe() para quadrados.
  • main.lua: reúna tudo criando instâncias das duas formas e demonstrando que elas herdam corretamente de Shape enquanto mantêm suas propriedades exclusivas.

Você receberá duas entradas:

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

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

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

O método :describe() de Circle deve exibir:

Circle with radius {radius}

O método :describe() de Square deve exibir:

Square with side {side}

Por exemplo, se as entradas forem blue,5 e red,4, a saída deverá 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 conta própria), enquanto cada uma tem seu próprio atributo exclusivo e método :describe()!

Experimente você mesmo

-- main.lua: Junte tudo

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

-- Ler a entrada para o círculo (color,radius)
local circleInput = io.read()
local circleColor, circleRadius = circleInput:match("([^,]+),([^,]+)")
circleRadius = tonumber(circleRadius)

-- Ler a entrada para o quadrado (color,side)
local squareInput = io.read()
local squareColor, squareSide = squareInput:match("([^,]+),([^,]+)")
squareSide = tonumber(squareSide)

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

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

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

-- TODO: Chame :describe() no quadrado

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

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

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de Lua online