| auteur : Woufeil | Un objet se construit à l'aide d'une fonction spéciale appelée constructeur. C'est une méthode de classe, elle recevra donc pour premier argument le nom de la classe à laquelle appartient l'objet.
En Perl, un objet est un référent, qui est la plupart du temps une table de hachage. Pour déclarer ce référent comme un objet, on utilise la fonction bless (que l'on pourrait traduire ''consacrer'' en Français) en lui passant comme argument la référence vers l'objet et le nom de la classe de l'objet (donc le nom du module contenant le constructeur). Cette fonction va lier la référence à la classe pour ensuite retourner la référence consacrée. Ainsi, l'objet ''saura'' à quelle classe il appartient. Un petit exemple vaut mieux qu'un long discours : Package Classe1;
use strict;
sub constructeur
{
my ($classe) = @_; #la fonction reçoit comme premier paramètre le nom de la classe
my $this = {}; #référence anonyme vers une table de hachage vide
bless ($this,$classe); #lie la référence à la classe
return $this; #on retourne la référence consacrée
}
1; #indique la fin du module |
Voilà un exemple de constructeur. Pour déclarer un objet membre de Classe1, il suffit d'appeler ce constructeur.
On peut définir plusieurs constructeurs pour la même classe en Perl, il suffit de créer une seconde fonction retournant une référence consacrée.
|
| auteur : Woufeil | Pour invoquer des méthodes en Perl, on utilise l'opérateur flèche qui s'écrit comme ceci : ->.
La syntaxe d'invocation est celle ci : invoquant->méthode(paramètres). L'invoquant est sois le nom de la classe si l'on invoque une méthode de classe sois le nom de l'objet auquel s'applique la méthode si l'on invoque une méthode d'instance.
Ici, notre constructeur est une méthode de classe, son invoquant est donc le nom de la classe dans laquelle il est définit.
Ainsi, pour créer un objet appelé obj1 à laide du constructeur précédemment définit, on fera ainsi : my $obj1 = Classe1->constructeur(); |
"Mais pourquoi ne passons-nous pas comme paramètre à la fonction le nom de la classe ?" allez vous me dire ? C'est fait automatiquement ! La méthode recevra toute seule comme premier paramètre l'invoquant avec lequel elle a été invoquée, ici Classe1. Il existe également une seconde syntaxe d'invocation : méthode invoquant (paramètres).
On peut donc invoquer le constructeur comme ceci : constructeur Classe1 ();
|
| auteur : Woufeil | C'est facile ! Dans le constructeur on crée une référence anonyme vers une table de hachage. Cette table n'est pas nécessairement (et ne devrais pas être) vide ! Reprenons l'exemple de la classe humain. On veut que notre humain est un nom et un âge. Voici le constructeur qui permet de faire ça :
Packge Humain;
use strict;
sub constructeur
{
my ($classe) = @_; #la fonction reçoit comme premier paramètre le nom de la classe
my $this = {''nom'' => ''Dupond'',
''age'' => 35}; #initialise les variables nom et age
bless ($this,$classe); #lie la référence à la classe
return $this; #on retourne la référence consacrée
}
1; |
|
| auteur : Woufeil | Le constructeur est une fonction, il ne reçoit pas forcément un seul paramètre. Ainsi si l'on veut définir l'âge et le nom de l'humain que l'on va créer lors de l'appel du constructeur, il suffit de lui passer comme argument ces deux données.
Appel du constructeur : my $dupond = Humain->constructeur(''Dupond'',35);
Définition du constructeur :
sub constructeur
{
my ($classe, $nom, $age) = @_;
my $this = {''nom'' => $nom,
''age'' => $age}; #initialise les variables nom et age
bless ($this,$classe); #lie la référence à la classe
return $this; #on retourne la référence consacrée
} |
Attention, le premier paramètre reste le nom de la classe ! Le premier paramètre donné lors de l'appel correspond au second paramètre du constructeur.
|
Consultez les autres F.A.Q's
|
Les sources présentées sur cette page sont libres de droits
et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur.
Copyright © 2005 Developpez Developpez LLC.
Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne
peut être faite de ce site ni de l'ensemble de son contenu : textes, documents
et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez
selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.