Vérification finale POO
Fait partie de la section Object Oriented Programming du Journey Lua de Coddy — leçon 70 sur 70.
Défi
FacileRassemblons tout ce que vous avez appris sur la POO en Lua ! Vous allez construire un système de véhicules qui démontre l'héritage, l'encapsulation via des conventions de nommage, et les mixins pour les capacités optionnelles.
Vous organiserez votre code sur cinq fichiers :
Vehicle.lua: La classe de base pour tous les véhicules. Chaque véhicule possède unnameet une propriété_speedsuivant la convention privée (initialisée à 0). Incluez un getter:getName(), un getter:getSpeed(), et un setter:setSpeed(value)qui rejette les valeurs négatives (si négative, affichez"Speed cannot be negative"et ne changez pas la valeur). Ajoutez une méthode:describe()qui retourne"{name} moving at {speed}".Refuelable.lua: Une table mixin contenant le comportement lié au carburant. Incluez une méthode:refuel(amount)qui s'ajoute àself._fuel, et une méthode:getFuel()qui retourne le niveau de carburant actuel.Car.lua: Hérite de Vehicle et utilise le mixin Refuelable. Le constructeur accepte unnameet initialise_fuelà 0. Surchargez:describe()pour retourner"{name} moving at {speed}, fuel: {fuel}". Appliquez le mixin Refuelable pour donner aux voitures des capacités de carburant.Bicycle.lua: Hérite uniquement de Vehicle — aucune fonctionnalité de carburant n'est nécessaire. Le constructeur accepte juste unname. Les vélos utilisent la méthode:describe()héritée sans modification.main.lua: Rassemblez le tout ! Créez une voiture et un vélo basés sur les entrées, démontrez leurs différentes capacités, et montrez comment ils partagent un comportement de véhicule commun tout en ayant des caractéristiques distinctes.
Vous recevrez 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 votre fichier principal :
- Créez une voiture et un vélo avec les noms donnés
- Définissez la vitesse pour les deux véhicules en utilisant la troisième entrée
- Ravitaillez la voiture avec la quatrième entrée
- Affichez la description de la voiture
- Affichez la description du vélo
Par exemple, si les entrées sont "Sedan", "Mountain Bike", "60", et "45", la sortie devrait ê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 devrait être :
Sports Car moving at 120, fuel: 80
Road Bike moving at 120Ce défi illustre comment l'héritage fournit un comportement partagé (les deux véhicules peuvent se déplacer), les mixins ajoutent des capacités optionnelles (seules les voitures ont besoin de carburant), et l'encapsulation protège l'intégrité des données (validation de la vitesse). Chaque technique sert un objectif différent dans votre 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 : Faire le plein de 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 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 robots12Défis finaux
Récapitulatif - Système d'inventaireRécapitulatif - Gestionnaire d'utilisateursRécapitulatif - Suivi des scoresVérification finale POO