Collection de formes
Fait partie de la section Programmation orientée objet du Journey Lua de Coddy. Leçon 59 sur 70.
Défi
FacileMaintenant que vous disposez des classes Rectangle et Circle avec toutes leurs fonctionnalités, créons une classe ShapeCollection capable de gérer plusieurs formes ensemble. Il s’agit d’un excellent exemple de composition : la collection « possède » des formes plutôt qu’elle ne « soit » une forme.
Vous allez ajouter un nouveau fichier à votre projet qui s’agrandit :
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 les 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, ainsi qu’une méthode:count()qui renvoie le nombre de formes actuellement stockées.main.lua: rassemblez tous les éléments en important vos modules. Lisez les dimensions saisies, créez un Rectangle et un Circle, ajoutez-les tous deux à une ShapeCollection, puis affichez le nombre de formes 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 montre comment le polymorphisme permet de traiter uniformément différents types d’objets grâce à 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 deuxième 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')
-- 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 le nombre de formes dans la collection
print(collection:count())
-- Afficher 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 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