Collection de formes
Fait partie de la section Object Oriented Programming du Journey Lua de Coddy — leçon 59 sur 70.
Défi
FacileMaintenant que vous avez les classes Rectangle et Circle avec toutes leurs fonctionnalités, créons une classe ShapeCollection capable de gérer plusieurs formes ensemble. C'est un excellent exemple de composition — la collection « a » des formes plutôt que d'« être » une forme.
Vous allez ajouter un nouveau fichier à votre projet en pleine expansion :
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: Créez une nouvelle classe qui stocke des formes en interne. Incluez un constructeur:new()qui initialise une liste vide de formes, une méthode:addShape(shape)qui ajoute n'importe quelle forme à la collection, et une méthode:count()qui retourne le nombre de formes actuellement stockées.main.lua: Rassemblez tout en important vos modules. Lisez les dimensions depuis l'entrée, créez un Rectangle et un Circle, ajoutez les deux à une ShapeCollection, puis affichez le nombre d'éléments de la collection suivi du nom de chaque forme (dans l'ordre où elles ont été ajoutées).
La ShapeCollection n'a pas besoin de savoir si elle stocke des rectangles ou des cercles — elle contient simplement des formes. Cela démontre comment le polymorphisme vous permet de traiter différents types d'objets de manière uniforme via une interface commune.
Entrée : Trois lignes — la largeur (nombre), la hauteur (nombre) et le rayon (nombre).
Sortie : Trois lignes — le nombre de formes dans la collection, puis le nom de la première forme ajoutée, puis le nom de la seconde forme ajoutée.
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 le nombre de formes dans la collection
print(collection:count())
-- Affiche le nom de chaque forme dans l'ordre où elles ont été ajoutées
for i = 1, collection:count() do
print(collection.shapes[i]:getName())
end
Toutes les leçons de Object Oriented Programming
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 Rectangle2Modè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 formes