Resumen - Ensamblaje de robots
Parte de la sección Object Oriented Programming del Journey de Lua de Coddy — lección 54 de 70.
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 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 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:
- El nombre del robot (una cadena)
- Una respuesta:
yesono
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 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 debería ser:
Robo says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nodsObserva 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
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 robots