Menu
Coddy logo textTech

Collection de formes

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

challenge icon

Défi

Facile

Maintenant que vous avez les classes Rectangle et Circle avec toutes leurs fonctionnalités, créons une classe ShapeCollection capable de gérer plusieurs formes ensemble. C'est un excellent exemple de composition — la collection « a » des formes plutôt que d'« être » une forme.

Vous allez ajouter un nouveau fichier à votre projet en pleine expansion :

  • Shape.lua : Votre classe de base Shape (inchangée).
  • Rectangle.lua : Votre classe Rectangle avec :getArea() et :getPerimeter().
  • Circle.lua : Votre classe Circle avec :getArea() et :getPerimeter().
  • ShapeCollection.lua : Créez une nouvelle classe qui stocke des formes en interne. Incluez un constructeur :new() qui initialise une liste vide de formes, une méthode :addShape(shape) qui ajoute n'importe quelle forme à la collection, et une méthode :count() qui retourne le nombre de formes actuellement stockées.
  • main.lua : Rassemblez tout en important vos modules. Lisez les dimensions depuis l'entrée, créez un Rectangle et un Circle, ajoutez les deux à une ShapeCollection, puis affichez le nombre d'éléments de la collection suivi du nom de chaque forme (dans l'ordre où elles ont été ajoutées).

La ShapeCollection n'a pas besoin de savoir si elle stocke des rectangles ou des cercles — elle contient simplement des formes. Cela démontre comment le polymorphisme vous permet de traiter différents types d'objets de manière uniforme via une interface commune.

Entrée : Trois lignes — la largeur (nombre), la hauteur (nombre) et le rayon (nombre).

Sortie : Trois lignes — le nombre de formes dans la collection, puis le nom de la première forme ajoutée, puis le nom de la seconde forme ajoutée.

Essayez vous-même

-- Requiert le module Rectangle
local Rectangle = require('Rectangle')

-- Requiert le module Circle
local Circle = require('Circle')

-- Requiert le module ShapeCollection
local ShapeCollection = require('ShapeCollection')

-- Lit la largeur et la hauteur depuis l'entrée
local width = tonumber(io.read())
local height = tonumber(io.read())
local radius = tonumber(io.read())

-- Crée une nouvelle instance de Rectangle avec les dimensions données
local rect = Rectangle:new(width, height)

-- Crée une nouvelle instance de Circle avec le rayon donné
local circ = Circle:new(radius)

-- Crée une nouvelle ShapeCollection
local collection = ShapeCollection:new()

-- Ajoute les deux formes à la collection
collection:addShape(rect)
collection:addShape(circ)

-- Affiche le nombre de formes dans la collection
print(collection:count())

-- Affiche le nom de chaque forme dans l'ordre où elles ont été ajoutées
for i = 1, collection:count() do
    print(collection.shapes[i]:getName())
end

Toutes les leçons de Object Oriented Programming