Recapitulação - Montagem de Robô
Parte da seção Programação Orientada a Objetos do Journey de Lua da Coddy. Lição 54 de 70.
Desafio
FácilVamos montar um Robot a partir de componentes individuais! Em vez de usar herança, você construirá um robô compondo-o com objetos separados de Arm, Leg e Head: cada um com seu próprio comportamento especializado. O robô coordenará essas partes por meio de delegação.
Você organizará seu código em cinco arquivos:
Arm.lua: crie uma classe Arm com um construtor:new(side)que armazene em qual lado ela está (por exemplo, "left" ou "right"). Inclua um método:raise()que imprima{side} arm raisede um método:lower()que imprima{side} arm lowered.Leg.lua: crie uma classe Leg com um construtor:new(side)que armazene o lado. Inclua um método:step()que imprima{side} leg steps forward.Head.lua: crie uma classe Head com um construtor:new(). Inclua um método:nod()que imprimaHead nodse um método:shake()que imprimaHead shakes.Robot.lua: crie uma classe Robot cujo construtor:new(name)armazene o nome e crie internamente todos os componentes: um braço esquerdo, um braço direito, uma perna esquerda, uma perna direita e uma cabeça. O robô deve ter os seguintes métodos, que delegam ações às suas partes::greet(): imprime{name} says hello!, depois levanta o braço direito e então o abaixa:walk(): faz a perna esquerda dar um passo e depois a perna direita:respond(answer): se a resposta for"yes", a cabeça acena; se for"no", a cabeça balança
main.lua: leia as entradas referentes ao nome do robô e a uma resposta sim/não. Crie um Robot, faça-o cumprimentar, caminhar e depois responder com base na entrada.
Você receberá duas entradas:
- O nome do robô (uma string)
- Uma resposta:
yesouno
Sua saída deve mostrar o robô coordenando suas partes:
{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nodsOu, se a resposta for no:
{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head shakesPor exemplo, se as entradas forem Robo e yes, a saída deverá ser:
Robo says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nodsObserve como o Robot não sabe como os braços se levantam ou como as pernas dão passos. Ele simplesmente diz a cada parte o que fazer. Cada componente é independente e reutilizável, e o robô atua como um coordenador, reunindo todos eles!
Experimente você mesmo
-- main.lua: Ponto de entrada para o desafio de composição do Robot
local Robot = require('Robot')
-- Lê as entradas
local name = io.read()
local answer = io.read()
-- TODO: Crie um Robot com o nome fornecido
-- TODO: Faça o robot cumprimentar
-- TODO: Faça o robot andar
-- TODO: Faça o robot responder com base na entrada answer
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 Formas9Composição e Mixins
Relacionamento Tem-UmDelegaçãoMixins SimplesAplicando Múltiplos MixinsMixins vs HerançaRecapitulação - Montagem de RobôPratique por conta própria: Compilador de Lua online