Récapitulatif - Assemblage de robots
Fait partie de la section Object Oriented Programming du Journey Lua de Coddy — leçon 54 sur 70.
Défi
FacileAssemblons un Robot à partir de composants individuels ! Au lieu d'utiliser l'héritage, vous allez construire un robot en le composant à partir d'objets Arm, Leg et Head séparés — chacun ayant son propre comportement spécialisé. Le robot coordonnera ces parties par délégation.
Vous organiserez votre code sur cinq fichiers :
Arm.lua: Créez une classe Arm avec un constructeur:new(side)qui stocke de quel côté il se trouve (par exemple, "left" ou "right"). Incluez une méthode:raise()qui affiche{side} arm raisedet une méthode:lower()qui affiche{side} arm lowered.Leg.lua: Créez une classe Leg avec un constructeur:new(side)qui stocke le côté. Incluez une méthode:step()qui affiche{side} leg steps forward.Head.lua: Créez une classe Head avec un constructeur:new(). Incluez une méthode:nod()qui afficheHead nodset une méthode:shake()qui afficheHead shakes.Robot.lua: Créez une classe Robot dont le constructeur:new(name)stocke le nom et crée toutes les pièces composantes en interne : un bras gauche, un bras droit, une jambe gauche, une jambe droite et une tête. Le robot doit avoir ces méthodes qui délèguent à ses parties ::greet()— affiche{name} says hello!, puis lève le bras droit, puis l'abaisse:walk()— fait avancer la jambe gauche, puis la jambe droite:respond(answer)— si la réponse est"yes", la tête fait un signe de tête ; si c'est"no", la tête secoue
main.lua: Lisez les entrées pour le nom du robot et une réponse yes/no. Créez un Robot, faites-le saluer, marcher, puis répondre en fonction de l'entrée.
Vous recevrez deux entrées :
- Le nom du robot (une chaîne de caractères)
- Une réponse :
yesouno
Votre sortie devrait montrer le robot coordonnant ses parties :
{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nodsOu si la réponse est no :
{name} says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head shakesPar exemple, si les entrées sont Robo et yes, la sortie devrait être :
Robo says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nodsRemarquez comment le Robot ne sait pas comment les bras se lèvent ou les jambes marchent — il dit simplement à chaque partie quoi faire. Chaque composant est indépendant et réutilisable, et le robot agit comme un coordinateur les réunissant tous ensemble !
Essayez vous-même
-- main.lua: Point d'entrée pour le défi de composition du 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 en sorte que le robot salue
-- TODO: Faire en sorte que le robot marche
-- TODO: Faire en sorte que le robot réponde en fonction de l'entrée answer
Toutes les leçons de Object Oriented Programming
1Le concept de « self »
Tables avec fonctions« self » expliciteLa syntaxe avec deux-pointsPoint vs deux-pointsRécapitulatif - Point mobile4Projet : Banque numérique
Configuration du projetMéthode de dépôt7Polymorphisme et Redéfinition
Redéfinition de méthodesAppeler des méthodes parentesDuck TypingInterface communeVérification du typeRécapitulatif - Rôles des employés10Projet : Gestionnaire de formes
Configuration du projetClasse Rectangle2Modèle de prototype de classe
Le concept de prototypeLiaison avec __indexLe constructeur :new()Initialisation des attributsInstances indépendantesRécapitulatif - Usine de voitures5Surcharge d'opérateurs en POO
Additionner des objetsSoustraire des objetsConcaténer des objetsComparer des objets (<, >)Récapitulatif - Calculs de portefeuille8Encapsulation
Conventions de nommageClosures pour la confidentialitéAccès via les ClosuresTables en lecture seuleLogique de validationRécapitulatif - Coffre-fort sécurisé11Patrons de conception (Lite)
Fonctions FactoryTable SingletonPatron IteratorObserver (Écouteur)Récapitulatif - Logger Factory3État et comportement des objets
Variables d'instanceMéthodes GetterMéthodes SetterPropriétés calculéesFormatage de chaînesVérifications d'égalitéRécapitulatif - Note de l'étudiant6Bases de l'héritage
Mise en place de l'héritageHériter des méthodesÉtendre le constructeurAjouter des méthodes enfantsPartagé vs UniqueRécapitulatif - Hiérarchie des formes9Composition et Mixins
Relation 'A un'DélégationMixins simplesAppliquer plusieurs MixinsMixins vs HéritageRécapitulatif - Assemblage de robots