Perl Objet : Quelques exemples en perl objet. Posted on Friday, July 01 @ 10:11:23 CEST
Topic:
|
Perl Objet : Quelques exemples en perl objet.
1. La programmation orientee objet en Perl
- 1.1 Un premier exemple simple pour commencer
-
1.2 Utilisation plus complexe des constructeurs
-
1.3 La definition automatique de methodes grace a AUTOLOAD
Perl Objet
Quelques exemples en perl objet.
1. La programmation orientee objet en Perl
1.1 Un premier exemple simple pour commencer
La classe User doit etre definie dans un fichier s'appelant User.pm. La fonction bless cree l'instance de ma classer User. La fonction new renvoie une reference vers cette instance.
Quand on utilise une methode, le premier argument passe est une reference vers l'instance de classe.
package User; use strict;
sub new { my $self = {}; $self->{LOGIN} = undef; $self->{UID} = undef; bless($self); # but see below return $self; }
# 1er arg. : reference vers une instance. # Autres arg. : arguments passes a la fonction. sub login { my $self = shift; if (@_) { $self->{LOGIN} = shift } return $self->{LOGIN}; }
sub uid { my $self = shift; if (@_) { $self->{UID} = shift } return $self->{UID}; }
1; # so the require or use succeeds:
Le script suivant utilise le module User.
use User;
$toto = User->new();
$toto->login("am"); print "login:",$toto->login," ";
1.2 Utilisation plus complexe des constructeurs
Le constructeur de ce module est plus complexe. La variable $proto a pour valeur une reference vers une instance deja creee ou bien le type User.
package User; use strict;
sub new { my $proto = shift; my $self = {}; if( ref($proto) ) { $self->{LOGIN}=$proto->{LOGIN}; $self->{UID}=$proto->{UID}; } else { $self->{LOGIN} = undef; $self->{UID} = undef; } bless($self); return $self; }
sub login { my $self = shift; if (@_) { $self->{LOGIN} = shift } return $self->{LOGIN}; }
sub uid { my $self = shift; if (@_) { $self->{UID} = shift } return $self->{UID}; }
1; # so the require or use succeeds:
Ce nouveau constructeur permet de creer l'objet $titi a partir de l'objet $toto.
use User;
$toto = User->new();
$toto->login("am");
$titi = $toto->new();
print "login titi:",$titi->login," "; print "login toto:",$toto->login," ";
1.3 La definition automatique de methodes grace a AUTOLOAD
La, on ne se donne meme plus la peine de definir les methodes servant a manipuler les attributs. La fonction AUTOLOAD est appelee si la methode demandee n'est pas definie. Dans ce cas, la variable $AUTOLOAD prend le nom de la methode appelee, comme par exemple User::login.
package User; use strict; use vars qw($AUTOLOAD);
sub new { my $proto = shift; my $self = {}; if( ref($proto) ) { $self->{login}=$proto->{login}; $self->{uid}=$proto->{uid}; } else { $self->{login} = undef; $self->{uid} = undef; } bless($self); return $self; }
sub AUTOLOAD { my $self = shift; my $name = $AUTOLOAD; # nom de la methode. Ex : 'User::login'. $name =~ s/.*:://;
if(@_) { $self->{$name} = shift; }
return $self->{$name}; }
1; # so the require or use succeeds:
use User;
$toto = User->new(); $toto->login("am"); print "login toto:",$toto->login," ";
|
|
| |
| Article Rating | Average Score: 5 Votes: 1

| |
|