Classe Cercle
Fait partie de la section Object Oriented Programming du Journey Lua de Coddy — leçon 57 sur 70.
Défi
FacileContinuons à construire notre gestionnaire de formes en ajoutant une classe Circle aux côtés du Rectangle que vous avez créé dans la leçon précédente.
Vous travaillerez avec quatre fichiers pour organiser vos formes :
Shape.lua: Votre classe de base Shape avec:new(name)et:getName().Rectangle.lua: Votre classe Rectangle du défi précédent avec:getArea().Circle.lua: Créez une classe Circle qui hérite de Shape. Le constructeur doit accepter unradius, appeler le constructeur parent avec le nom"Circle", et stocker le rayon. Ajoutez une méthode:getArea()qui calcule l'aire du cercle en utilisant la formule πr². Utilisezmath.pipour la valeur de π.main.lua: Importez vos modules Rectangle et Circle. Lisez trois valeurs à partir de l'entrée : la largeur d'un rectangle, la hauteur d'un rectangle et le rayon d'un cercle. Créez une instance de chaque forme et affichez quatre lignes — le nom du rectangle, l'aire du rectangle, le nom du cercle et l'aire du cercle.
Les deux formes partagent désormais la même interface grâce à l'héritage — chacune possède une méthode :getName() provenant de Shape et sa propre implémentation de :getArea(). Cette interface commune deviendra utile dans les prochaines leçons.
Entrée : Trois lignes — largeur (nombre), hauteur (nombre) et rayon (nombre).
Sortie : Quatre lignes — le nom du rectangle, l'aire du rectangle, le nom du cercle, l'aire du cercle.
Essayez vous-même
-- Requiert le module Rectangle
local Rectangle = require('Rectangle')
-- Requiert le module Circle
-- TODO: Requiert le module Circle ici
-- Lit la largeur et la hauteur depuis l'entrée
local width = tonumber(io.read())
local height = tonumber(io.read())
-- TODO: Lit le rayon depuis l'entrée
-- Crée une nouvelle instance de Rectangle avec les dimensions données
local rect = Rectangle:new(width, height)
-- TODO: Crée une nouvelle instance de Circle avec le rayon donné
-- Affiche le nom et l'aire du rectangle
print(rect:getName())
print(rect:getArea())
-- TODO: Affiche le nom et l'aire du cercle
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