Classe Círculo
Parte da seção Programação Orientada a Objetos do Journey de Lua da Coddy. Lição 57 de 70.
Desafio
FácilVamos continuar construindo nosso Shape Manager adicionando uma classe Circle junto ao Rectangle que você criou na lição anterior.
Você trabalhará com quatro arquivos para manter suas formas organizadas:
Shape.lua: sua classe Shape base com:new(name)e:getName().Rectangle.lua: sua classe Rectangle do desafio anterior com:getArea().Circle.lua: crie uma classe Circle que herde de Shape. O construtor deve aceitar umradius, chamar o construtor da classe pai com o nome"Circle"e armazenar o raio. Adicione um método:getArea()que calcule a área do círculo usando a fórmula πr². Usemath.pipara o valor de π.main.lua: exija 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.
Agora, ambas as formas compartilham a mesma interface por meio da herança: cada uma possui um método :getName() de Shape e sua própria implementação de :getArea(). Essa interface comum será ú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 e á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 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