Recapitulação - Hierarquia de Formas
Parte da seção Object Oriented Programming do Journey de Lua da Coddy — lição 36 de 70.
Desafio
FácilVamos 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:
- Dados do círculo: cor e raio separados por uma vírgula (ex:
blue,5) - 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:
- Chame
:describe()no círculo - Chame
:describe()no quadrado - Imprima a cor do círculo usando
:getColor() - 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
redIsso 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
1O Conceito 'Self'
Tabelas com Funções'self' ExplícitoA Sintaxe de Dois-pontosPonto vs Dois-pontosRecapitulação - Movendo o Ponto4Projeto: Banco Digital
Configuração do ProjetoMétodo de Depósito7Polimorfismo e Sobrescrita
Sobrescrita de MétodosChamando Métodos da Classe PaiDuck TypingInterface ComumVerificando o TipoRecapitulação - Papéis de Funcionários10Projeto: Gerenciador de Formas
Configuração do ProjetoClasse Retângulo2Padrão de Protótipo de Classe
O Conceito de ProtótipoVinculando com __indexO Construtor :new()Inicializando AtributosInstâncias IndependentesRecapitulação - Fábrica de Carros5Sobrecarga de Operadores em POO
Somando ObjetosSubtraindo ObjetosConcatenando ObjetosComparando Objetos (<, >)Recapitulação - Matemática de Carteira8Encapsulamento
Convenções de NomenclaturaClosures para PrivacidadeAcesso via ClosuresTabelas Somente LeituraLógica de ValidaçãoRecapitulação - Cofre Seguro11Padrões de Projeto (Lite)
Funções FactoryTabela SingletonPadrão IteratorObserver (Listener)Recapitulação - Logger Factory3Estado e Comportamento do Objeto
Variáveis de InstânciaMétodos GetterMétodos SetterPropriedades CalculadasFormatação de StringsVerificações de IgualdadeRecapitulação - Nota do Aluno6Fundamentos de Herança
Configurando a HerançaHerdando MétodosEstendendo o ConstrutorAdicionando Métodos FilhosCompartilhado vs ÚnicoRecapitulação - Hierarquia de Formas