Menu
Coddy logo textTech

Vérification finale POO

Fait partie de la section Object Oriented Programming du Journey Lua de Coddy — leçon 70 sur 70.

challenge icon

Défi

Facile

Rassemblons 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 un name et une propriété _speed suivant 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 un name et 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 un name. 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 :

  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 votre fichier principal :

  1. Créez une voiture et un vélo avec les noms donnés
  2. Définissez la vitesse pour les deux véhicules en utilisant la troisième entrée
  3. Ravitaillez la voiture avec la quatrième entrée
  4. Affichez la description de la voiture
  5. 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 60

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

Ce 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