Menu
Coddy logo textTech

Collection de formes

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

challenge icon

Défi

Facile

Maintenant que vous disposez des classes Rectangle et Circle avec toutes leurs fonctionnalités, créons une classe ShapeCollection capable de gérer plusieurs formes ensemble. Il s’agit d’un excellent exemple de composition : la collection « possède » des formes plutôt qu’elle ne « soit » une forme.

Vous allez ajouter un nouveau fichier à votre projet qui s’agrandit :

  • 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 les 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, ainsi qu’une méthode :count() qui renvoie le nombre de formes actuellement stockées.
  • main.lua : rassemblez tous les éléments en important vos modules. Lisez les dimensions saisies, créez un Rectangle et un Circle, ajoutez-les tous deux à une ShapeCollection, puis affichez le nombre de formes 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 montre comment le polymorphisme permet de traiter uniformément différents types d’objets grâce à 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 deuxième 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')

-- Lire 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éer une nouvelle instance de Rectangle avec les dimensions données
local rect = Rectangle:new(width, height)

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

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

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

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

-- Afficher 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 Programmation orientée objet

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