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 brille vraiment : 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 à construire sur vos fichiers de projet existants :

  • 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 : É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 retourner la somme de toutes les aires.
  • main.lua : Importez vos modules, lisez les dimensions depuis l'entrée, créez un Rectangle et un Circle, ajoutez les deux à une ShapeCollection, puis affichez l'aire totale de toutes les formes de la collection.

La beauté de cette approche est que :getTotalArea() n'a pas besoin de 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 n'importe quelle 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')

-- 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 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