Menu
Coddy logo textTech

Resumen - Ensamblaje de robots

Parte de la sección Programación Orientada a Objetos del Journey de Lua de Coddy. Lección 54 de 70.

challenge icon

Desafío

Fácil

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

Organizarás tu código en cinco archivos:

  • Arm.lua: Crea una clase Arm con un constructor :new(side) que almacene en qué lado se encuentra (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 internamente todos los componentes: un brazo izquierdo, un brazo derecho, una pierna izquierda, una pierna derecha y una cabeza. El robot debe tener estos métodos, que deleguen en sus componentes:
    • :greet(): imprime {name} says hello!, después levanta el brazo derecho y después lo baja
    • :walk(): hace que la pierna izquierda dé un paso y después que lo haga la pierna derecha
    • :respond(answer): si answer es "yes", la cabeza asiente; si es "no", la cabeza niega
  • main.lua: Lee las entradas correspondientes al nombre del robot y a una respuesta de sí/no. Crea un Robot, hace que salude, camine y después responda según la entrada.

Recibirás dos entradas:

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

Tu salida debe mostrar cómo el robot coordina sus componentes:

{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 debe ser:

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

Observa que el Robot no sabe cómo se levantan los brazos ni cómo dan pasos las piernas. Simplemente indica a cada componente qué debe hacer. Cada componente es independiente y reutilizable, y el robot actúa como coordinador, reuniéndolos 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: Crea un Robot con el nombre dado
-- TODO: Haz que el robot salude
-- TODO: Haz que el robot camine
-- TODO: Haz que el robot responda basándose en la entrada answer

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de Lua online