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¡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 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 robots