Menu
Coddy logo textTech

Récapitulatif - Hiérarchie des formes

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

challenge icon

Défi

Facile

Construisons une hiérarchie de formes complète à partir de zéro ! Vous allez créer une classe parente Shape dont toutes les formes hériteront, puis construire les classes enfants Circle et Square qui possèdent chacune leurs propres propriétés uniques tout en partageant des fonctionnalités communes.

Vous organiserez votre code sur quatre fichiers :

  • Shape.lua : Votre classe de base dont toutes les formes hériteront. Elle doit avoir un constructeur :new(color) qui stocke la couleur de la forme, et une méthode :getColor() qui la retourne. Cette propriété partagée signifie que chaque forme — qu'il s'agisse d'un cercle ou d'un carré — aura une couleur.
  • Circle.lua : Une classe enfant qui hérite de Shape. Son constructeur :new(color, radius) doit appeler le constructeur parent pour la couleur, puis ajouter le rayon comme attribut unique. Incluez une méthode :describe() qui affiche les détails du cercle.
  • Square.lua : Une autre classe enfant héritant de Shape. Son constructeur :new(color, side) doit également appeler le constructeur parent, puis stocker la longueur du côté. Incluez également une méthode :describe() pour les carrés.
  • main.lua : Rassemblez le tout en créant des instances des deux formes et en démontrant qu'elles héritent correctement de Shape tout en conservant leurs propriétés uniques.

Vous recevrez deux entrées :

  1. Données du cercle : couleur et rayon séparés par une virgule (par exemple, blue,5)
  2. Données du carré : couleur et longueur du côté séparées par une virgule (par exemple, red,4)

Dans votre fichier principal, créez un Circle et un Square avec les valeurs fournies. Ensuite, affichez les éléments suivants sur des lignes séparées :

  1. Appelez :describe() sur le cercle
  2. Appelez :describe() sur le carré
  3. Affichez la couleur du cercle en utilisant :getColor()
  4. Affichez la couleur du carré en utilisant :getColor()

La méthode :describe() pour Circle doit afficher :

Circle with radius {radius}

La méthode :describe() pour Square doit afficher :

Square with side {side}

Par exemple, si les entrées sont blue,5 et red,4, la sortie doit être :

Circle with radius 5
Square with side 4
blue
red

Cela démontre le modèle d'héritage complet : les deux formes héritent de :getColor() de Shape (elles ne le définissent jamais elles-mêmes), tandis que chacune possède son propre attribut unique et sa méthode :describe() !

Essayez vous-même

-- main.lua : Rassembler tous les éléments

local Circle = require('Circle')
local Square = require('Square')

-- Lire l'entrée pour le cercle (couleur,rayon)
local circleInput = io.read()
local circleColor, circleRadius = circleInput:match("([^,]+),([^,]+)")
circleRadius = tonumber(circleRadius)

-- Lire l'entrée pour le carré (couleur,côté)
local squareInput = io.read()
local squareColor, squareSide = squareInput:match("([^,]+),([^,]+)")
squareSide = tonumber(squareSide)

-- TODO: Créer une instance de Circle avec la couleur et le rayon donnés

-- TODO: Créer une instance de Square avec la couleur et le côté donnés

-- TODO: Appeler :describe() sur le cercle

-- TODO: Appeler :describe() sur le carré

-- TODO: Afficher la couleur du cercle en utilisant :getColor()

-- TODO: Afficher la couleur du carré en utilisant :getColor()

Toutes les leçons de Object Oriented Programming