wiki:InsiaProgPerlOoUser

Sommaire

Programmation Perl - Programmation orienté objet (utilisation)

Autres chapitres: conception, création.

1. Programmation orientée objet

Paradigme

Plutôt que de considérer un programme comme une suite d'actions manipulant des données quelconques, la programmation OO propose de centrer sa vision autour de ce qui est manipulé. Un programme OO va alors se soucier du cycle de vie de ses objets: on les crée, on les utilise, puis éventuellement on les détruit.

Cela implique dans un programme de se soucier de la donnée avant de la manipuler, comme on le fait déjà pour la déclaration et l'initialisation. La création d'un objet peut être considéré comme une initialisation sophistiquée et sur mesure:

my $file = FileHandle->new(">sortie.txt");  # my $file; open($file, ">sortie.txt");
my $line = $file->getline();                # my $line = <$file>;
$file->close();                             # close($file);

Classe et instance

Une classe décrit l'interface que pourra accepter un type d'interface, on y trouve:

  • les méthodes: ce sont les actions que l'on peut effectuer sur un objet (ex: $file->close())
  • les attributs: comparables à des variables, on peut les lire et écrire (ex: $eleve->nom)

En général, il n'est pas possible d'invoquer ces méthode et attributs sans désigner un objet qui a été dûment créé: cet objet est appelé une instance de la classe qui le décrit. On est dans une situation comparable au type et à la variable. Dans le dernier exemple, FileHandle est la classe et $file est l'objet.

On utilise souvent de manière interchangeable les mots objet et instance.

Note: dans certains cas, il est possible d'invoquer une méthode "de classe", sans l'existence d'un objet particulier (par exemple pour la création de l'objet lui-même).

Héritage

Une classe est en général définie comme le cumul de fonctions de classes existantes, plus des nouvelles fonctionnalités. Cette conception "par couche", où l'on peut empiler les fonctions pour créer des classes plus sophistiquées (ou plus spécialisées) est appelée l'héritage.

my $mirza = Chien->new();
$mirza->aboie();

my $medor = ChientMechant->new(); # ChientMechant "hérite de" Chien
$medor->aboie();               # donc il peut en particulier aboyer, comme tout "Chien"
$medor->attaque();             # mais il peut aussi attaquer!

2. Utilisation des objets en Perl

La majorité des modules du répertoire CPAN sont fournis sous forme de classes, il faut donc en général commencer par instancier des objets pour pouvoir accéder à leurs fonctionnalités. Par convention (et il ne s'agit que d'une convention), le constructeur est en général est la méthode new(). Il y a bien sûr des exceptions:

use DBI;

my $db = DBI->connect($dsn, $user, $password);

Un objet en Perl est une référence sur une structure quelconque (scalaire, liste, tableau, etc), qu'on a en plus associé à une classe particulière (nous verrons comment en concevant nos propres objets). Ainsi ces deux éléments sont différents:

my $mirza = Chien->new();
print "Ce chien s'appelle: ".$mirza->name();   # Il s'agit de la méthode 'name'
print "Ce chien s'appelle: ".$mirza->{'name'}; # Il s'agit de l'élément 'name' du tableau %{$mirza}

Il est assez courant que les paramètres d'un constructeur soient passés sous la forme d'un tableau (associatif), ceci rendant plus lisible l'utilisation de l'objet. Dans ce cas on veille bien à utiliser une référence vers un tableau:

use DBIx::SearchBuilder::Handle;

my $handle = DBIx::SearchBuilder::Handle->new();
$handle->Connect({
  Driver => 'SQLite',
  Database => "my_test_db"
});

Profitez de l'héritage: quand vous manipulez un objet de la classe Toto, vous avez le droit d'utiliser les méthodes de tout ses "parents".

Last modified 13 years ago Last modified on Mar 5, 2007, 1:37:26 PM