Classe Círculo
Parte da seção Object Oriented Programming do Journey de Lua da Coddy — lição 57 de 70.
Desafio
FácilVamos continuar construindo nosso Gerenciador de Formas adicionando uma classe Circle ao lado do Retângulo que você criou na lição anterior.
Você trabalhará com quatro arquivos para manter suas formas organizadas:
Shape.lua: Sua classe base Shape com:new(name)e:getName().Rectangle.lua: Sua classe Rectangle do desafio anterior com:getArea().Circle.lua: Crie uma classe Circle que herda de Shape. O construtor deve aceitar umradius, chamar o construtor pai com o nome"Circle"e armazenar o raio. Adicione um método:getArea()que calcula a área do círculo usando a fórmula πr². Usemath.pipara o valor de π.main.lua: Requeira ambos os módulos Rectangle e Circle. Leia três valores da entrada: a largura de um retângulo, a altura de um retângulo e o raio de um círculo. Crie uma instância de cada forma e imprima quatro linhas — o nome do retângulo, a área do retângulo, o nome do círculo e a área do círculo.
Ambas as formas agora compartilham a mesma interface através da herança — cada uma possui um método :getName() de Shape e sua própria implementação de :getArea(). Essa interface comum se tornará útil nas próximas lições.
Entrada: Três linhas — largura (número), altura (número) e raio (número).
Saída: Quatro linhas — nome do retângulo, área do retângulo, nome do círculo, área do círculo.
Experimente você mesmo
-- Requer o módulo Rectangle
local Rectangle = require('Rectangle')
-- Requer o módulo Circle
-- TODO: Requerer o módulo Circle aqui
-- Lê a largura e a altura da entrada
local width = tonumber(io.read())
local height = tonumber(io.read())
-- TODO: Ler o raio da entrada
-- Cria uma nova instância de Rectangle com as dimensões fornecidas
local rect = Rectangle:new(width, height)
-- TODO: Criar uma nova instância de Circle com o raio fornecido
-- Imprime o nome e a área do retângulo
print(rect:getName())
print(rect:getArea())
-- TODO: Imprimir o nome e a área do círculo
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