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 empty, définir sa metatable et relier __index devient répétitif. La solution standard consiste à définir directement dans la class une méthode constructeur :new() qui s’occupe de 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!")
endDécomposons ce qui se passe à l’intérieur de :new(). Tout d’abord, nous créons une table vide appelé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 renvoyons le nouvel objet.
Remarquez la ligne Dog.__index = Dog en dehors du constructeur. Il s’agit d’un raccourci courant : au lieu de créer une métatable distincte, la table de classe sert à la fois de prototype et de métatable.
La création d’objets est maintenant propre et cohérente :
local myDog = Dog:new()
myDog:bark() -- Sortie : Woof!Chaque classe que tu crées suivra cette même structure. Le constructeur :new() devient l’unique endroit où s’effectue la création d’objets, ce qui rend ton code organisé et prévisible.
Défi
FacileConstruisons une classe Cat en utilisant le modèle de constructeur standard que tu viens d'apprendre. Tu organiseras ton code sur deux fichiers afin de t'exercer à structurer correctement les modules.
Tu vas créer :
Cat.lua: définis ta classeCatavec le modèle de constructeur complet. Ta 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 son du chat
- La table de classe avec
main.lua: importe ton module Cat et utilise le constructeur pour créer une instance de chat. Appelle ensuite sa méthode afin de vérifier que tout est correctement relié.
Tu recevras une entrée : le nombre de fois que ton chat doit miauler.
Ta méthode :meow() doit afficher exactement :
Meow!Dans ton fichier principal, crée un chat avec Cat:new() et appelle :meow() le nombre de fois indiqué.
Par exemple, si l'entrée est 3, la sortie doit ê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())
-- TODO: Créer une instance de chat en utilisant Cat:new()
-- TODO: 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 formesEntraînez-vous par vous-même : Compilateur Lua en ligne