Méthode Périmètre
Fait partie de la section Object Oriented Programming du Journey Lua de Coddy — leçon 58 sur 70.
Défi
FacileÉtends 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 exemple parfait de polymorphisme en action.
Tu continueras à travailler avec tes fichiers existants :
Shape.lua: Ta classe de base Shape reste inchangée.Rectangle.lua: Ajoute une méthode:getPerimeter()qui retourne le périmètre du rectangle en utilisant la formule 2 × (width + height).Circle.lua: Ajoute une méthode:getPerimeter()qui retourne la circonférence du cercle en utilisant la formule 2 × π × radius. Utilisemath.pipour π.main.lua: Importe les deux modules de forme, lis les dimensions depuis l'entrée, 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 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 : le nom du rectangle, l'aire du rectangle, le périmètre du rectangle, le nom du cercle, l'aire du cercle, le périmètre du cercle.
Essayez vous-même
-- Requiert le module Rectangle
local Rectangle = require('Rectangle')
-- Requiert le module Circle
local Circle = require('Circle')
-- 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)
-- Affiche le nom, l'aire et le périmètre du rectangle
print(rect:getName())
print(rect:getArea())
print(rect:getPerimeter())
-- Affiche 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 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