Menu
Coddy logo textTech

Resumen - Ensamblaje de robots

Parte de la sección Object Oriented Programming del Journey de Lua de Coddy — lección 54 de 70.

challenge icon

Desafío

Fácil

¡Vamos a ensamblar un Robot a partir de piezas componentes individuales! En lugar de usar la herencia, construirás un robot componiéndolo a partir de objetos Arm, Leg y Head separados, cada uno con su propio comportamiento especializado. El robot coordinará estas partes a través de la delegación.

Organizarás tu código en cinco archivos:

  • Arm.lua: Crea una clase Arm con un constructor :new(side) que almacene de qué lado está (por ejemplo, "left" o "right"). Incluye un método :raise() que imprima {side} arm raised y un método :lower() que imprima {side} arm lowered.
  • Leg.lua: Crea una clase Leg con un constructor :new(side) que almacene el lado. Incluye un método :step() que imprima {side} leg steps forward.
  • Head.lua: Crea una clase Head con un constructor :new(). Incluye un método :nod() que imprima Head nods y un método :shake() que imprima Head shakes.
  • Robot.lua: Crea una clase Robot cuyo constructor :new(name) almacene el nombre y cree todas las piezas componentes internamente: un brazo izquierdo, un brazo derecho, una pierna izquierda, una pierna derecha y una cabeza. El robot debe tener estos métodos que delegan en sus partes:
    • :greet() — imprime {name} says hello!, luego levanta el brazo derecho y después lo baja
    • :walk() — hace que la pierna izquierda dé un paso y luego la pierna derecha
    • :respond(answer) — si la respuesta es "yes", la cabeza asiente; si es "no", la cabeza niega
  • main.lua: Lee las entradas para el nombre del robot y una respuesta yes/no. Crea un Robot, haz que salude, camine y luego responda según la entrada.

Recibirás dos entradas:

  1. El nombre del robot (una cadena)
  2. Una respuesta: yes o no

Tu salida debería mostrar al robot coordinando sus partes:

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

O si la respuesta es no:

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

Por ejemplo, si las entradas son Robo y yes, la salida debería ser:

Robo says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nods

Observa cómo el Robot no sabe cómo se levantan los brazos o cómo caminan las piernas; simplemente le dice a cada parte qué hacer. ¡Cada componente es independiente y reutilizable, y el robot actúa como un coordinador que los une a todos!

Pruébalo tú mismo

-- main.lua: Punto de entrada para el desafío de composición de Robot

local Robot = require('Robot')

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

-- TODO: Crear un Robot con el nombre dado
-- TODO: Hacer que el robot salude
-- TODO: Hacer que el robot camine
-- TODO: Hacer que el robot responda basándose en la entrada de respuesta

Todas las lecciones de Object Oriented Programming