Récapitulatif - Assemblage de robots
Fait partie de la section Programmation orientée objet 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, 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 raisedet 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 afficheHead nodset une méthode:shake()qui afficheHead 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 :
- Le nom du robot (une chaîne de caractères)
- Une réponse :
yesouno
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 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 doit être :
Robo says hello!
right arm raised
right arm lowered
left leg steps forward
right leg steps forward
Head nodsRemarque 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
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 RectangleClasse CercleMéthode PérimètreCollection de formesAire totaleFiltrer les formes2Modè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 robotsEntraînez-vous par vous-même : Compilateur Lua en ligne