Menu
Coddy logo textTech

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.

challenge icon

Desafio

Fácil

Vamos 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 raised e 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 imprima Head nods e um método :shake() que imprima Head 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:

  1. O nome do robô (uma string)
  2. Uma resposta: yes ou no

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 nods

Ou, se a resposta for no:

{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head shakes

Por 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 nods

Observe 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

Pratique por conta própria: Compilador de Lua online