Menu
Coddy logo textTech

Recapitulação - Montagem de Robô

Parte da seção Object Oriented Programming 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 a partir de objetos Arm, Leg e Head separados — 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 armazena de qual lado ela está (por exemplo, "left" ou "right"). Inclua um método :raise() que imprime {side} arm raised e um método :lower() que imprime {side} arm lowered.
  • Leg.lua: Crie uma classe Leg com um construtor :new(side) que armazena o lado. Inclua um método :step() que imprime {side} leg steps forward.
  • Head.lua: Crie uma classe Head com um construtor :new(). Inclua um método :nod() que imprime Head nods e um método :shake() que imprime Head shakes.
  • Robot.lua: Crie uma classe Robot cujo construtor :new(name) armazena o nome e cria todas as partes componentes internamente: um braço esquerdo, um braço direito, uma perna esquerda, uma perna direita e uma cabeça. O robô deve ter estes métodos que delegam para suas partes:
    • :greet() — imprime {name} says hello!, depois levanta o braço direito e o abaixa
    • :walk() — faz a perna esquerda dar um passo e, em seguida, a perna direita
    • :respond(answer) — se a resposta for "yes", a cabeça acena positivamente (nods); se for "no", a cabeça balança negativamente (shakes)
  • main.lua: Leia as entradas para o nome do robô e uma resposta yes/no. Crie um Robot, faça-o cumprimentar, andar e, em seguida, 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 deve 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 as pernas caminham — ele simplesmente diz a cada parte o que fazer. Cada componente é independente e reutilizável, e o robô atua como um coordenador unindo todos eles!

Experimente você mesmo

-- main.lua: Ponto de entrada para o desafio de composição do Robô

local Robot = require('Robot')

-- Ler entradas
local name = io.read()
local answer = io.read()

-- TODO: Criar um Robô com o nome fornecido
-- TODO: Fazer o robô cumprimentar
-- TODO: Fazer o robô caminhar
-- TODO: Fazer o robô responder com base na entrada da resposta

Todas as lições de Object Oriented Programming