Menu
Coddy logo textTech

Aire totale

Fait partie de la section Object Oriented Programming 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 Object Oriented Programming