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 : (modification externe)
