Riepilogo - Assemblaggio di robot
Fa parte della sezione Programmazione orientata agli oggetti del percorso Lua di Coddy. Lezione 54 di 70.
Sfida
FacileAssembliamo 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 raisede 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 stampaHead nodse un metodo:shake()che stampaHead 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:
- Il nome del robot (una stringa)
- Una risposta:
yesono
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 nodsOppure, se la risposta è no:
{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head shakesPer 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 nodsNota 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
1Il concetto di «self»
Tabelle con funzioni«self» esplicitoLa sintassi dei due puntiPunto o due puntiRiepilogo - Spostare il punto4Progetto: Banca digitale
Configurazione del progettoMetodo di deposito2Schema del prototipo di classe
Il concetto di prototipoCollegare con __indexIl costruttore :new()Inizializzare gli attributiIstanze indipendentiRiepilogo - Fabbrica di auto5Sovraccarico degli operatori nella OOP
Sommare oggettiSottrarre oggettiConcatenare oggettiConfrontare oggetti (<, >)Ripasso - Calcoli con il portafoglio8Incapsulamento
Convenzioni di denominazioneClosure per la privacyAccesso tramite closureTabelle di sola letturaLogica di convalidaRiepilogo - Cassaforte sicura11Modelli di progettazione (base)
Funzioni factoryTabella singletonPattern IteratorObserver (listener)Riepilogo - Factory per logger3Stato e comportamento degli oggetti
Variabili di istanzaMetodi getterMetodi setterProprietà calcolateFormattazione delle stringheControlli di uguaglianzaRiepilogo - Voto dello studente6Fondamenti dell'ereditarietà
Configurare l'ereditarietàEreditare i metodiEstendere il costruttoreAggiungere metodi alla classe figliaCondiviso vs specificoRiepilogo - Gerarchia delle forme9Composizione e mixin
Relazione Has-ADelegaMixin sempliciApplicare più mixinMixin vs ereditarietàRiepilogo - Assemblaggio di robotEsercitati da solo: Compilatore Lua online