Méthode Périmètre
Fait partie de la section Programmation orientée objet du Journey Lua de Coddy. Leçon 58 sur 70.
Défi
FacileÉtendons notre gestionnaire de formes en ajoutant une méthode :getPerimeter() aux classes Rectangle et Circle. Tout comme :getArea(), chaque forme calcule son périmètre différemment, mais elles partagent le même nom de méthode : un parfait exemple de polymorphisme en action.
Tu continueras à travailler avec tes fichiers existants :
Shape.lua: ta classe Shape de base reste inchangée.Rectangle.lua: ajoute une méthode:getPerimeter()qui renvoie le périmètre du rectangle à l’aide de la formule 2 × (width + height).Circle.lua: ajoute une méthode:getPerimeter()qui renvoie la circonférence du cercle à l’aide de la formule 2 × π × radius. Utilisemath.pipour π.main.lua: importe les deux modules de formes, lis les dimensions saisies, crée un Rectangle et un Circle, puis affiche six lignes : le nom, l’aire et le périmètre du rectangle, suivis du nom, de l’aire et du périmètre du cercle.
Les deux formes disposent désormais d’une interface complète avec :getName(), :getArea() et :getPerimeter() : toutes sont accessibles via les mêmes noms de méthodes malgré des implémentations différentes.
Entrée : Trois lignes : width (nombre), height (nombre) et radius (nombre).
Sortie : Six lignes dans l’ordre : nom du rectangle, aire du rectangle, périmètre du rectangle, nom du cercle, aire du cercle, périmètre du cercle.
Essayez vous-même
-- Charger le module Rectangle
local Rectangle = require('Rectangle')
-- Charger le module Circle
local Circle = require('Circle')
-- 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)
-- Afficher le nom, l'aire et le périmètre du rectangle
print(rect:getName())
print(rect:getArea())
print(rect:getPerimeter())
-- Afficher le nom, l'aire et le périmètre du cercle
print(circ:getName())
print(circ:getArea())
print(circ:getPerimeter())
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