Menu
Coddy logo textTech

Vérification finale POO

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

challenge icon

Défi

Facile

Mettons 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 un name et un _speed privé 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, affiche Speed cannot be negative et 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 un name et 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 un name. 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 :

  1. Nom de la voiture
  2. Nom du vélo
  3. Vitesse à définir pour les deux véhicules (un nombre)
  4. Quantité de carburant à ajouter à la voiture (un nombre)

Dans ton fichier principal :

  1. Crée une voiture et un vélo avec les noms donnés
  2. Définis la vitesse des deux véhicules à l’aide de la troisième entrée
  3. Ajoute du carburant à la voiture avec la quatrième entrée
  4. Affiche la description de la voiture
  5. 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 60

Si 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 120

Ce 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

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