Menu
Coddy logo textTech

Riepilogo - Assemblaggio di robot

Fa parte della sezione Programmazione orientata agli oggetti del percorso Lua di Coddy. Lezione 54 di 70.

challenge icon

Sfida

Facile

Assembliamo un Robot a partire da singoli componenti! Invece di usare l'ereditarietà, costruirai un robot componendolo con oggetti separati Arm, Leg e Head: ciascuno con un comportamento specializzato. Il robot coordinerà questi componenti tramite delega.

Organizzerai il codice in cinque file:

  • Arm.lua: Crea una classe Arm con un costruttore :new(side) che memorizzi da quale lato si trova (ad es., "left" o "right"). Includi un metodo :raise() che stampa {side} arm raised e un metodo :lower() che stampa {side} arm lowered.
  • Leg.lua: Crea una classe Leg con un costruttore :new(side) che memorizzi il lato. Includi un metodo :step() che stampa {side} leg steps forward.
  • Head.lua: Crea una classe Head con un costruttore :new(). Includi un metodo :nod() che stampa Head nods e un metodo :shake() che stampa Head shakes.
  • Robot.lua: Crea una classe Robot il cui costruttore :new(name) memorizzi il nome e crei internamente tutti i componenti: un braccio sinistro, un braccio destro, una gamba sinistra, una gamba destra e una testa. Il robot dovrebbe avere questi metodi, che delegano le operazioni ai suoi componenti:
    • :greet(): stampa {name} says hello!, poi alza il braccio destro e infine lo abbassa
    • :walk(): fa fare un passo alla gamba sinistra e poi alla gamba destra
    • :respond(answer): se la risposta è "yes", la testa annuisce; se è "no", la testa scuote
  • main.lua: Leggi gli input per il nome del robot e una risposta sì/no. Crea un Robot, fagli salutare, camminare e poi rispondere in base all'input.

Riceverai due input:

  1. Il nome del robot (una stringa)
  2. Una risposta: yes o no

L'output dovrebbe mostrare il robot mentre coordina i suoi componenti:

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

Oppure, se la risposta è no:

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

Per esempio, se gli input sono Robo e yes, l'output dovrebbe essere:

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

Nota come il Robot non sappia come si alzano le braccia o si fanno i passi con le gambe. Si limita a dire a ciascun componente cosa fare. Ogni componente è indipendente e riutilizzabile, e il robot funge da coordinatore riunendoli tutti!

Provalo tu

-- main.lua: Punto di ingresso per la sfida di composizione di Robot

local Robot = require('Robot')

-- Leggi gli input
local name = io.read()
local answer = io.read()

-- TODO: Crea un Robot con il nome fornito
-- TODO: Fai salutare il robot
-- TODO: Fai camminare il robot
-- TODO: Fai rispondere il robot in base all'input answer

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Lua online