perl:programmation_oriente_objet_utilisation
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
perl:programmation_oriente_objet_utilisation [2009/03/15 00:52] – édition externe 127.0.0.1 | perl:programmation_oriente_objet_utilisation [2013/03/12 23:39] (Version actuelle) – root | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ====== Objets ====== | ||
+ | |||
====== 1. Programmation orientée objet ====== | ====== 1. Programmation orientée objet ====== | ||
Ligne 6: | Ligne 8: | ||
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' | 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' | ||
+ | <code perl> | ||
my $file = FileHandle-> | my $file = FileHandle-> | ||
my $line = $file-> | my $line = $file-> | ||
$file-> | $file-> | ||
+ | </ | ||
===== Classe et instance ===== | ===== Classe et instance ===== | ||
Ligne 25: | Ligne 29: | ||
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", | 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", | ||
+ | <code perl> | ||
my $mirza = Chien-> | my $mirza = Chien-> | ||
$mirza-> | $mirza-> | ||
Ligne 31: | Ligne 36: | ||
$medor-> | $medor-> | ||
$medor-> | $medor-> | ||
+ | </ | ||
====== 2. Utilisation des objets en Perl ====== | ====== 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), | 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), | ||
+ | <code perl> | ||
use DBI; | use DBI; | ||
| | ||
my $db = DBI-> | my $db = DBI-> | ||
+ | </ | ||
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 : | 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 : | ||
+ | <code perl> | ||
my $mirza = Chien-> | my $mirza = Chien-> | ||
print "Ce chien s' | print "Ce chien s' | ||
print "Ce chien s' | print "Ce chien s' | ||
+ | </ | ||
Il est assez courant que les paramètres d'un constructeur soient passés sous la forme d'un tableau (associatif), | Il est assez courant que les paramètres d'un constructeur soient passés sous la forme d'un tableau (associatif), | ||
+ | <code perl> | ||
use DBIx:: | use DBIx:: | ||
| | ||
Ligne 53: | Ligne 63: | ||
Database => " | Database => " | ||
}); | }); | ||
+ | </ | ||
Profitez de l' | Profitez de l' | ||
+ | |||
+ | |||
+ | ===== Exemple ===== | ||
+ | ==== Création d'un module ==== | ||
+ | |||
+ | * **Fichier classe : // | ||
+ | <code perl joueur.pm> | ||
+ | package joueur; | ||
+ | |||
+ | use strict; | ||
+ | use warnings; | ||
+ | |||
+ | our $info=" | ||
+ | |||
+ | # | ||
+ | sub new { | ||
+ | my ( $classe, $nom ) = @_; #on passe les données au constructeur | ||
+ | |||
+ | my $this = { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }; | ||
+ | |||
+ | bless( $this, $classe ); #lie la référence à la classe | ||
+ | return $this; #on retourne la référence consacrée | ||
+ | } | ||
+ | |||
+ | sub avance { | ||
+ | my ( $this, $nb_case ) = @_; | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | sub recule { | ||
+ | my ( $this, $nb_case ) = @_; | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | sub tourne_gauche { | ||
+ | my ( $this, $nb_case ) = @_; | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | sub tourne_droite { | ||
+ | my ( $this, $nb_case ) = @_; | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | sub position { | ||
+ | my $this = shift; | ||
+ | print " | ||
+ | } | ||
+ | |||
+ | sub AUTOLOAD | ||
+ | { | ||
+ | our $AUTOLOAD; | ||
+ | print " | ||
+ | } | ||
+ | |||
+ | # Destructeur | ||
+ | sub DESTROY { | ||
+ | my $this = shift; | ||
+ | print " | ||
+ | } | ||
+ | |||
+ | 1; | ||
+ | </ | ||
+ | |||
+ | ==== Utilisation du module et de ses classes ==== | ||
+ | * **Programme principal :** | ||
+ | <code perl mail.pl> | ||
+ | # | ||
+ | |||
+ | use lib " | ||
+ | use joueur; | ||
+ | |||
+ | print $joueur:: | ||
+ | |||
+ | my $p1 = joueur-> | ||
+ | my $p2 = joueur-> | ||
+ | |||
+ | $p1-> | ||
+ | $p1-> | ||
+ | $p1-> | ||
+ | $p1-> | ||
+ | $p1-> | ||
+ | |||
+ | $p2-> | ||
+ | $p2-> | ||
+ | $p2-> | ||
+ | $p2-> | ||
+ | $p2-> | ||
+ | |||
+ | $p1-> | ||
+ | $p2-> | ||
+ | |||
+ | $p2-> | ||
+ | </ | ||
perl/programmation_oriente_objet_utilisation.1237078351.txt.gz · Dernière modification : 2010/11/27 17:08 (modification externe)