Aire totale
Fait partie de la section Programmation orientée objet du Journey Lua de Coddy. Leçon 60 sur 70.
Défi
FacileAjoutons 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
1Le concept de « self »
Tables avec fonctions« self » expliciteLa syntaxe avec deux-pointsPoint vs deux-pointsRécapitulatif - Point mobile4Projet : Banque numérique
Configuration du projetMéthode de dépôt7Polymorphisme et Redéfinition
Redéfinition de méthodesAppeler des méthodes parentesDuck TypingInterface communeVérification du typeRécapitulatif - Rôles des employés10Projet : Gestionnaire de formes
Configuration du projetClasse RectangleClasse CercleMéthode PérimètreCollection de formesAire totaleFiltrer les formes2Modèle de prototype de classe
Le concept de prototypeLiaison avec __indexLe constructeur :new()Initialisation des attributsInstances indépendantesRécapitulatif - Usine de voitures5Surcharge d'opérateurs en POO
Additionner des objetsSoustraire des objetsConcaténer des objetsComparer des objets (<, >)Récapitulatif - Calculs de portefeuille8Encapsulation
Conventions de nommageClosures pour la confidentialitéAccès via les ClosuresTables en lecture seuleLogique de validationRécapitulatif - Coffre-fort sécurisé11Patrons de conception (Lite)
Fonctions FactoryTable SingletonPatron IteratorObserver (Écouteur)Récapitulatif - Logger Factory3État et comportement des objets
Variables d'instanceMéthodes GetterMéthodes SetterPropriétés calculéesFormatage de chaînesVérifications d'égalitéRécapitulatif - Note de l'étudiant6Bases de l'héritage
Mise en place de l'héritageHériter des méthodesÉtendre le constructeurAjouter des méthodes enfantsPartagé vs UniqueRécapitulatif - Hiérarchie des formesEntraînez-vous par vous-même : Compilateur Lua en ligne