Le constructeur :new()
Fait partie de la section Programmation orientée objet du Journey Lua de Coddy — leçon 8 sur 70.
Créer des objets manuellement — créer une table vide, définir sa métatable, lier __index — devient répétitif. La solution standard consiste à définir une méthode constructeur :new() directement dans la classe qui gère tout cela pour vous.
Voici le modèle :
local Dog = {}
Dog.__index = Dog
function Dog:new()
local instance = {}
setmetatable(instance, self)
return instance
end
function Dog:bark()
print("Woof!")
endAnalysons ce qui se passe à l'intérieur de :new(). Tout d'abord, nous créons une table vide nommée instance. Ensuite, nous définissons sa métatable sur self — qui est Dog lorsque nous appelons Dog:new().
Puisque Dog.__index pointe vers Dog lui-même, l'instance peut trouver toutes les méthodes définies dans Dog. Enfin, nous retournons le nouvel objet.
Remarquez la ligne Dog.__index = Dog à l'extérieur du constructeur. C'est un raccourci courant : au lieu de créer une métatable séparée, la table de classe sert à la fois de prototype et de métatable.
Désormais, la création d'objets est propre et cohérente :
local myDog = Dog:new()
myDog:bark() -- Sortie : Woof !Chaque classe que vous créez suivra cette même structure. Le constructeur :new() devient l'endroit unique où la création d'objets se produit, rendant votre code organisé et prévisible.
Défi
FacileConstruisons une classe Cat en utilisant le modèle de constructeur standard que vous venez d'apprendre. Vous organiserez votre code sur deux fichiers pour pratiquer une structure de module appropriée.
Vous allez créer :
Cat.lua: Définissez votre classeCatavec le modèle de constructeur complet. Votre classe doit inclure :- La table de classe avec
__indexpointant vers elle-même - Un constructeur
:new()qui crée une instance, définit sa métatable et la renvoie - Une méthode
:meow()qui affiche le cri du chat
- La table de classe avec
main.lua: Importez votre module Cat avec require et utilisez le constructeur pour créer une instance de chat. Ensuite, appelez sa méthode pour vérifier que tout est correctement lié.
Vous recevrez une entrée : le nombre de fois que votre chat doit miauler.
Votre méthode :meow() doit afficher exactement :
Meow!Dans votre fichier principal, créez un chat en utilisant Cat:new() et appelez :meow() le nombre de fois spécifié.
Par exemple, si l'entrée est 3, la sortie devrait être :
Meow!
Meow!
Meow!Essayez vous-même
-- Charger le module Cat
local Cat = require('Cat')
-- Lire l'entrée : nombre de fois à miauler
local times = tonumber(io.read())
-- À FAIRE : Créer une instance de chat en utilisant Cat:new()
-- À FAIRE : Appeler la méthode :meow() le nombre de fois spécifié
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
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 formes