Vérification finale POO
Fait partie de la section Programmation orientée objet du Journey Lua de Coddy. Leçon 70 sur 70.
Défi
FacileMettons en pratique tout ce que tu as appris sur la POO en Lua ! Tu vas créer un système de véhicules qui illustre l’héritage, l’encapsulation au moyen de conventions de nommage et les mixins pour les fonctionnalités optionnelles.
Tu organiseras ton code dans cinq fichiers :
Vehicle.lua: la classe de base pour tous les véhicules. Chaque véhicule possède unnameet un_speedprivé selon une convention (initialisé à 0). Ajoute un accesseur:getName(), un accesseur:getSpeed()et un mutateur:setSpeed(value)qui refuse les valeurs négatives (si la valeur est négative, afficheSpeed cannot be negativeet ne modifie pas la valeur). Ajoute une méthode:describe()qui renvoie"{name} moving at {speed}".Refuelable.lua: une table de mixin contenant le comportement lié au carburant. Ajoute une méthode:refuel(amount)qui ajoute une quantité àself._fuel, ainsi qu’une méthode:getFuel()qui renvoie le niveau actuel de carburant.Car.lua: hérite de Vehicle et utilise le mixin Refuelable. Le constructeur accepte unnameet initialise_fuelà 0. Redéfinis:describe()pour qu’elle renvoie"{name} moving at {speed}, fuel: {fuel}". Applique le mixin Refuelable pour donner aux voitures des fonctionnalités liées au carburant.Bicycle.lua: hérite uniquement de Vehicle : aucune fonctionnalité liée au carburant n’est nécessaire. Le constructeur accepte seulement unname. Les vélos utilisent la méthode:describe()héritée sans modification.main.lua: rassemble tout ! Crée une voiture et un vélo à partir des entrées, présente leurs capacités différentes et montre comment ils partagent un comportement commun de véhicule tout en ayant des fonctionnalités distinctes.
Tu recevras quatre entrées :
- Nom de la voiture
- Nom du vélo
- Vitesse à définir pour les deux véhicules (un nombre)
- Quantité de carburant à ajouter à la voiture (un nombre)
Dans ton fichier principal :
- Crée une voiture et un vélo avec les noms donnés
- Définis la vitesse des deux véhicules à l’aide de la troisième entrée
- Ajoute du carburant à la voiture avec la quatrième entrée
- Affiche la description de la voiture
- Affiche la description du vélo
Par exemple, si les entrées sont Sedan, Mountain Bike, 60 et 45, la sortie doit être :
Sedan moving at 60, fuel: 45
Mountain Bike moving at 60Si les entrées sont Sports Car, Road Bike, 120 et 80, la sortie doit être :
Sports Car moving at 120, fuel: 80
Road Bike moving at 120Ce défi montre comment l’héritage fournit un comportement partagé (les deux véhicules peuvent se déplacer), comment les mixins ajoutent des fonctionnalités optionnelles (seules les voitures ont besoin de carburant) et comment l’encapsulation protège l’intégrité des données (validation de la vitesse). Chaque technique joue un rôle différent dans ta conception !
Essayez vous-même
-- main.lua : Rassembler le tout
local Car = require('Car')
local Bicycle = require('Bicycle')
-- Lire les entrées
local carName = io.read()
local bicycleName = io.read()
local speed = tonumber(io.read())
local fuelAmount = tonumber(io.read())
-- TODO: Créer une voiture avec le nom donné
-- TODO: Créer un vélo avec le nom donné
-- TODO: Définir la vitesse pour les deux véhicules
-- TODO: Ravitailler la voiture avec la quantité de carburant
-- TODO: Afficher la description de la voiture
-- TODO: Afficher la description du vélo
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 robots12Défis finaux
Récapitulatif - Système d'inventaireRécapitulatif - Gestionnaire d'utilisateursRécapitulatif - Suivi des scoresVérification finale POOEntraînez-vous par vous-même : Compilateur Lua en ligne