Menu
Coddy logo textTech

Récapitulatif - Assemblage de robots

Fait partie de la section Programmation orientée objet du Journey Lua de Coddy. Leçon 54 sur 70.

challenge icon

Défi

Facile

Assemblons un Robot à partir de composants individuels ! Au lieu d'utiliser l'héritage, tu vas construire un robot en le composant à partir d'objets distincts Arm, Leg et Head : chacun avec son propre comportement spécialisé. Le robot coordonnera ces composants par délégation.

Tu organiseras ton code sur cinq fichiers :

  • Arm.lua : crée une classe Arm avec un constructeur :new(side) qui enregistre le côté auquel elle appartient (par exemple, "left" ou "right"). Inclus une méthode :raise() qui affiche {side} arm raised et une méthode :lower() qui affiche {side} arm lowered.
  • Leg.lua : crée une classe Leg avec un constructeur :new(side) qui enregistre le côté. Inclus une méthode :step() qui affiche {side} leg steps forward.
  • Head.lua : crée une classe Head avec un constructeur :new(). Inclus une méthode :nod() qui affiche Head nods et une méthode :shake() qui affiche Head shakes.
  • Robot.lua : crée une classe Robot dont le constructeur :new(name) enregistre le nom et crée en interne tous les composants : un bras gauche, un bras droit, une jambe gauche, une jambe droite et une tête. Le robot doit avoir les méthodes suivantes, qui délèguent les actions à ses composants :
    • :greet() : affiche {name} says hello!, puis lève le bras droit et l'abaisse ensuite
    • :walk() : fait avancer la jambe gauche, puis la jambe droite
    • :respond(answer) : si answer vaut "yes", la tête acquiesce ; si elle vaut "no", la tête secoue la tête
  • main.lua : lis les entrées correspondant au nom du robot et à une réponse oui/non. Crée un Robot, fais-lui dire bonjour, marcher, puis répondre en fonction de l'entrée.

Tu recevras deux entrées :

  1. Le nom du robot (une chaîne de caractères)
  2. Une réponse : yes ou no

Ta sortie doit montrer le robot en train de coordonner ses composants :

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

Ou si la réponse est no :

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

Par exemple, si les entrées sont Robo et yes, la sortie doit être :

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

Remarque que le Robot ne sait pas comment les bras se lèvent ni comment les jambes avancent. Il dit simplement à chaque composant quoi faire. Chaque composant est indépendant et réutilisable, et le robot agit comme un coordinateur qui les réunit tous !

Essayez vous-même

-- main.lua : Point d'entrée pour le défi de composition Robot

local Robot = require('Robot')

-- Lire les entrées
local name = io.read()
local answer = io.read()

-- TODO: Créer un Robot avec le nom donné
-- TODO: Faire saluer le robot
-- TODO: Faire marcher le robot
-- TODO: Faire répondre le robot en fonction de l'entrée answer

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Compilateur Lua en ligne