Récapitulatif - Hiérarchie des formes
Fait partie de la section Programmation orientée objet du Journey Lua de Coddy. Leçon 36 sur 70.
Défi
FacileConstruisons une hiérarchie complète de formes à partir de zéro ! Tu vas créer une classe parente Shape dont toutes les formes hériteront, puis créer les classes enfants Circle et Square, qui auront chacune leurs propres propriétés tout en partageant des fonctionnalités communes.
Tu organiseras ton code sur quatre fichiers :
Shape.lua: ta classe de base dont toutes les formes hériteront. Elle doit avoir un constructeur:new(color)qui stocke la couleur de la forme, ainsi qu'une méthode:getColor()qui la renvoie. Cette propriété partagée signifie que chaque forme, qu'il s'agisse d'un cercle ou d'un carré, aura une couleur.Circle.lua: une classe enfant qui hérite de Shape. Son constructeur:new(color, radius)doit appeler le constructeur parent pour la couleur, puis ajouter le rayon comme attribut unique. Ajoute une méthode:describe()qui affiche les détails du cercle.Square.lua: une autre classe enfant qui hérite de Shape. Son constructeur:new(color, side)doit également appeler le constructeur parent, puis stocker la longueur du côté. Ajoute également une méthode:describe()pour les carrés.main.lua: rassemble tout en créant des instances des deux formes et en démontrant qu'elles héritent correctement de Shape tout en conservant leurs propriétés uniques.
Tu recevras deux entrées :
- Données du cercle : couleur et rayon séparés par une virgule (par exemple,
blue,5) - Données du carré : couleur et longueur du côté séparées par une virgule (par exemple,
red,4)
Dans ton fichier principal, crée un Circle et un Square avec les valeurs fournies. Affiche ensuite les éléments suivants sur des lignes séparées :
- Appelle
:describe()sur le cercle - Appelle
:describe()sur le carré - Affiche la couleur du cercle avec
:getColor() - Affiche la couleur du carré avec
:getColor()
La méthode :describe() de Circle doit afficher :
Circle with radius {radius}La méthode :describe() de Square doit afficher :
Square with side {side}Par exemple, si les entrées sont blue,5 et red,4, la sortie doit être :
Circle with radius 5
Square with side 4
blue
redCela démontre le modèle complet d'héritage : les deux formes héritent de :getColor() de Shape (elles ne la définissent jamais elles-mêmes), tandis que chacune possède son propre attribut unique et sa propre méthode :describe() !
Essayez vous-même
-- main.lua : Rassembler le tout
local Circle = require('Circle')
local Square = require('Square')
-- Lire l'entrée pour le cercle (color,radius)
local circleInput = io.read()
local circleColor, circleRadius = circleInput:match("([^,]+),([^,]+)")
circleRadius = tonumber(circleRadius)
-- Lire l'entrée pour le carré (color,side)
local squareInput = io.read()
local squareColor, squareSide = squareInput:match("([^,]+),([^,]+)")
squareSide = tonumber(squareSide)
-- TODO: Créer une instance de Circle avec la couleur et le rayon donnés
-- TODO: Créer une instance de Square avec la couleur et le côté donnés
-- TODO: Appeler :describe() sur le cercle
-- TODO: Appeler :describe() sur le carré
-- TODO: Afficher la couleur du cercle en utilisant :getColor()
-- TODO: Afficher la couleur du carré en utilisant :getColor()
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