Menu
Coddy logo textTech

Initialisation des attributs

Fait partie de la section Programmation orientée objet du Journey Lua de Coddy. Leçon 9 sur 70.

Le constructeur :new() que tu as appris crée des objets, mais chaque instance commence de manière identique. Les objets réels ont besoin de données uniques : une personne a un nom précis, un joueur a un score de départ. Pour rendre les objets utiles, le constructeur doit accepter des arguments et les attribuer à la nouvelle instance.

Voici comment étendre le constructor pour accepter des valeurs initiales :

local Dog = {}
Dog.__index = Dog

function Dog:new(name, breed)
    local instance = {}
    setmetatable(instance, self)
    instance.name = name
    instance.breed = breed
    return instance
end

function Dog:introduce()
    print("I am " .. self.name .. ", a " .. self.breed)
end

Le constructeur prend maintenant name et breed comme paramètres. Après avoir créé l’instance vide et défini sa métatable, nous attribuons directement ces valeurs aux champs de l’instance. Chaque objet créé aura ses propres name et breed.

local dog1 = Dog:new("Rex", "German Shepherd")
local dog2 = Dog:new("Bella", "Poodle")

dog1:introduce()  -- Sortie : Je suis Rex, un berger allemand
dog2:introduce()  -- Sortie : Je suis Bella, un caniche

Les deux chiens partagent la même méthode :introduce() du prototype, mais chacun possède son propre nom et sa propre race, stockés dans sa table d’instance. C’est là toute la puissance de la combinaison des prototypes et des constructeurs paramétrés : un comportement partagé avec un état individuel.

challenge icon

Défi

Facile

Construisons une classe Person qui crée des individus uniques avec leurs propres noms et âges. Vous organiserez votre code sur deux fichiers afin de vous exercer à structurer correctement les modules.

Vous allez créer :

  • Person.lua : définissez votre classe Person avec un constructeur qui accepte un nom et un âge. Incluez une méthode :introduce() qui permet à chaque personne de se présenter.
  • main.lua : exigez votre module Person et créez une instance de personne à l’aide des entrées fournies. Faites-la ensuite se présenter.

Votre constructeur :new(name, age) doit accepter les deux valeurs et les stocker dans la nouvelle instance. La méthode :introduce() doit afficher le texte dans ce format exact :

Hello, my name is [name] and I am [age] years old

Vous recevrez deux entrées :

  1. Le nom de la personne
  2. L’âge de la personne

Par exemple, si les entrées sont Alice et 25, la sortie doit être :

Hello, my name is Alice and I am 25 years old

Essayez vous-même

-- Charger le module Person
local Person = require('Person')

-- Lire l'entrée
local name = io.read()
local age = io.read()

-- TODO: Créer une nouvelle instance de Person en utilisant Person:new(name, age)

-- TODO: Appeler la méthode introduce() sur votre instance de person
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Compilateur Lua en ligne