Menu
CoddyTech

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