FAQ PerlConsultez toutes les FAQ

Nombre d'auteurs : 18, nombre de questions : 250, dernière mise à jour : 29 octobre 2015  Ajouter une question

 

Bienvenue sur la FAQ Perl. Cette FAQ a pour vocation de vous enseigner ou de vous faire revoir les notions élémentaires de ce fantastique langage. Perl est très utilisé dans différents domaines depuis la gestion système, le réseaux, l'administration de bases de données, le web (CGI), la bureautique, la conception d'interfaces graphiques ou des contextes scientifiques telle la bioinformatique. Nous espérons que cette FAQ vous sera d'une grande utilité.

Vous souhaitez participer à l'amélioration de cette FAQ, n'hésitez pas !! Commentez

Bonne lecture !


SommaireProgrammation orientée objets en PerlLa vie d'un objet en Perl (5)
précédent sommaire suivant
 

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 :

Code perl : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
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.

Mis à jour le 8 février 2006 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 :

Code perl : Sélectionner tout
invoquant->méthode(paramètres);
L'invoquant est soit le nom de la classe si l'on invoque une méthode de classe, soit 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éfini. Ainsi, pour créer un objet appelé obj1 à l'aide du constructeur précédemment défini, on fera ainsi :

Code perl : Sélectionner tout
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 par 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();

Mis à jour le 8 février 2006 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 devrait pas être) vide ! Reprenons l'exemple de la classe humain. On veut que notre humain ait un nom et un âge. Voici le constructeur qui permet de faire ça :

Code perl : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
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;

Mis à jour le 8 février 2006 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 :

Code perl : Sélectionner tout
1
2
# Appel du constructeur :  
my $dupond = Humain->constructeur("Dupond",35);
Code perl : Sélectionner tout
1
2
3
4
5
6
7
8
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.

Mis à jour le 8 février 2006 Woufeil

Un destructeur est une méthode particulière d'une classe. Elle sera invoquée à chaque fois que plus aucune référence ne pointera vers l'objet à détruire. Si par exemple vous avez créé une référence $dupond vers un objet et que vous affectez à $dupond la valeur undef, plus aucune référence ne pointera vers l'objet $dupond et le destructeur sera appelé car $dupond ne sera plus accessible par aucun moyen. Le destructeur sert à détruire un objet correctement.
En Perl, le destructeur est une méthode d'instance nommée DESTROY. Exemple de destructeur.

Code perl : Sélectionner tout
1
2
3
4
5
6
#Dans le module Humain 
sub DESTROY 
{ 
   my ($this) = @_ 
   print "L'objet $dupond->{nom} va être détruit !"; 
}

Mis à jour le 21 février 2006 Woufeil

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

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 © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et 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.

 
Responsable bénévole de la rubrique Perl : djibril -