Menu
Coddy logo textTech

Aire totale

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

challenge icon

Défi

Facile

Ajoutons une fonctionnalité puissante à votre ShapeCollection : la capacité de calculer l’aire totale de toutes les formes qu’elle contient. C’est ici que le polymorphisme révèle toute sa puissance : votre collection peut appeler :getArea() sur n’importe quelle forme sans savoir s’il s’agit d’un rectangle ou d’un cercle.

Vous continuerez à vous appuyer sur les fichiers existants de votre projet :

  • Shape.lua : votre classe Shape de base (inchangée).
  • Rectangle.lua : votre classe Rectangle avec :getArea() et :getPerimeter().
  • Circle.lua : votre classe Circle avec :getArea() et :getPerimeter().
  • ShapeCollection.lua : étendez votre classe de collection en ajoutant une méthode :getTotalArea(). Cette méthode doit parcourir toutes les formes stockées, appeler :getArea() sur chacune d’elles et renvoyer la somme de toutes les aires.
  • main.lua : chargez vos modules, lisez les dimensions saisies, créez un Rectangle et un Circle, ajoutez-les tous les deux à une ShapeCollection, puis affichez l’aire totale de toutes les formes de la collection.

L’intérêt de cette approche est que :getTotalArea() n’a pas besoin d’une logique distincte pour les rectangles et les cercles. Elle fait simplement confiance au fait que chaque forme de la collection possède une méthode :getArea(). Vous pourriez ajouter des triangles, des hexagones ou toute autre forme plus tard, et le calcul de l’aire totale fonctionnerait sans modification.

Entrée : trois lignes : largeur (nombre), hauteur (nombre) et rayon (nombre).

Sortie : une seule ligne contenant l’aire totale de toutes les formes de la collection.

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 l'aire totale de toutes les formes de la collection
print(collection:getTotalArea())

Toutes les leçons de Programmation orientée objet

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