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.
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 raisedy 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 imprimaHead nodsy un método:shake()que imprimaHead 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:
- El nombre del robot (una cadena)
- Una respuesta:
yesono
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 nodsO, si la respuesta es no:
{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head shakesPor 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 nodsObserva 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
1El concepto de 'self'
Tablas con funciones'self' explícitoLa sintaxis de dos puntosPunto vs. dos puntosResumen - Punto en movimiento4Proyecto: Banco Digital
Configuración del proyectoMétodo de depósito2Patrón de prototipo de clase
El concepto de prototipoVinculación con __indexEl constructor :new()Inicialización de atributosInstancias independientesResumen - Fábrica de coches5Sobrecarga de operadores en POO
Sumar objetosRestar objetosConcatenar objetosComparar objetos (<, >)Resumen - Matemáticas de la billetera8Encapsulamiento
Convenciones de nomenclaturaClosures para privacidadAcceso mediante ClosuresTablas de solo lecturaLógica de validaciónResumen - Bóveda segura11Patrones de diseño (Lite)
Funciones FactoryTabla SingletonPatrón IteradorObserver (Listener)Resumen - Logger Factory3Estado y Comportamiento de los Objetos
Variables de InstanciaMétodos GetterMétodos SetterPropiedades CalculadasFormateo de StringsComprobaciones de IgualdadResumen - Calificación del Estudiante6Fundamentos de la herencia
Configuración de la herenciaHerencia de métodosExtender el constructorAñadir métodos hijosCompartido vs. ÚnicoResumen: Jerarquía de formas9Composición y Mixins
Relación "Tiene-Un"DelegaciónMixins simplesAplicación de múltiples MixinsMixins vs. HerenciaResumen - Ensamblaje de robotsPractica por tu cuenta: Compilador de Lua online