Classe Retângulo
Parte da seção Object Oriented Programming do Journey de Lua da Coddy — lição 56 de 70.
Desafio
FácilAgora vamos expandir nosso Gerenciador de Formas criando uma classe Rectangle que herda da classe base Shape que você construiu na lição anterior.
Você trabalhará com três arquivos para manter seu código organizado:
Shape.lua: Sua classe base Shape do desafio anterior (com:new(name)e:getName()).Rectangle.lua: Crie uma classe Rectangle que herda de Shape. O construtor deve aceitarwidtheheight, chamar o construtor pai com o nome"Rectangle"e armazenar as dimensões. Adicione um método:getArea()que calcula e retorna a área do retângulo.main.lua: Importe seu módulo Rectangle, leia a largura e a altura da entrada, crie uma instância de Rectangle e imprima seu nome seguido de sua área em linhas separadas.
Lembre-se de configurar o link de herança corretamente para que as instâncias de Rectangle possam acessar os métodos de Shape através da cadeia de protótipos.
Entrada: Duas linhas — a primeira contendo a largura (número), a segunda contendo a altura (número).
Saída: Duas linhas — o nome do retângulo vindo de :getName(), seguido por sua área vinda de :getArea().
Experimente você mesmo
-- Requer o módulo Rectangle
local Rectangle = require('Rectangle')
-- Lê a largura e a altura da entrada
local width = tonumber(io.read())
local height = tonumber(io.read())
-- Cria uma nova instância de Rectangle com as dimensões fornecidas
local rect = Rectangle:new(width, height)
-- Imprime o nome e a área do retângulo
print(rect:getName())
print(rect:getArea())
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