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.
Desafio
FácilVamos 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:
- Dados do círculo: cor e raio separados por uma vírgula (por exemplo,
blue,5) - 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:
- Chame
:describe()no círculo - Chame
:describe()no quadrado - Exiba a cor do círculo usando
:getColor() - 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
redIsso 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
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ânguloClasse CírculoMétodo PerímetroColeção de FormasÁrea TotalFiltrar Formas2Padrã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 FormasPratique por conta própria: Compilador de Lua online