perl:programmation_oriente_objet_utilisation
Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
perl:programmation_oriente_objet_utilisation [2009/03/15 00:52] – créée root | perl:programmation_oriente_objet_utilisation [2013/03/12 23:39] (Version actuelle) – root | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | == 1. Programmation orientée objet == | + | ====== Objets ====== |
- | === Paradigme === | + | ====== 1. Programmation orientée objet ====== |
+ | |||
+ | ===== Paradigme | ||
Plutôt que de considérer un programme comme une suite d' | Plutôt que de considérer un programme comme une suite d' | ||
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' | ||
- | my $file = FileHandle-> | + | <code perl> |
- | my $line = $file-> | + | my $file = FileHandle-> |
- | | + | my $line = $file-> |
+ | $file-> | ||
+ | </ | ||
- | === Classe et instance === | + | ===== Classe et instance |
Une classe décrit l' | Une classe décrit l' | ||
- | * ''' | + | * **les méthodes**: ce sont les actions que l'on peut effectuer sur un objet (ex: //$file-> |
- | * ''' | + | * **les attributs**: comparables à des variables, on peut les lire et écrire (ex: //$eleve-> |
- | En général, il n'est pas possible d' | + | En général, il n'est pas possible d' |
- | On utilise souvent de manière interchangeable les mots '' | + | On utilise souvent de manière interchangeable les mots //objet// et //instance//. |
- | ''' | + | **Note**: dans certains cas, il est possible d' |
- | === Héritage === | + | ===== 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", | 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", | ||
- | my $mirza = Chien-> | + | <code perl> |
- | | + | my $mirza = Chien-> |
- | + | $mirza-> | |
- | my $medor = ChientMechant-> | + | |
- | | + | my $medor = ChientMechant-> |
- | | + | $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), |
- | + | <code 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), | + | |
- | 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 : | ||
- | my $mirza = Chien-> | + | <code perl> |
- | print "Ce chien s' | + | my $mirza = Chien-> |
- | 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), | ||
- | use DBIx:: | + | <code perl> |
+ | use DBIx:: | ||
+ | |||
+ | my $handle = DBIx:: | ||
+ | $handle-> | ||
+ | Driver => ' | ||
+ | Database => " | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | Profitez de l' | ||
+ | |||
+ | |||
+ | ===== Exemple ===== | ||
+ | ==== Création d'un module ==== | ||
- | | + | * **Fichier classe : // |
- | $handle->Connect({ | + | <code perl joueur.pm> |
- | Driver | + | package joueur; |
- | Database | + | |
- | }); | + | 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 ) = @_; | ||
+ | | ||
+ | } | ||
+ | |||
+ | sub recule { | ||
+ | my ( $this, $nb_case ) = @_; | ||
+ | $this->{y} -= $nb_case; | ||
+ | } | ||
+ | |||
+ | sub tourne_gauche { | ||
+ | my ( $this, $nb_case ) = @_; | ||
+ | $this->{x} -= $nb_case; | ||
+ | } | ||
+ | |||
+ | sub tourne_droite { | ||
+ | my ( $this, $nb_case ) = @_; | ||
+ | | ||
+ | } | ||
+ | |||
+ | sub position { | ||
+ | my $this = shift; | ||
+ | print " | ||
+ | } | ||
+ | |||
+ | sub AUTOLOAD | ||
+ | { | ||
+ | our $AUTOLOAD; | ||
+ | print "ERREUR : La fonction $AUTOLOAD n'a pas été définie !\n"; | ||
+ | } | ||
+ | |||
+ | # 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-> | ||
- | Profitez de l' | + | $p2-> |
+ | </ | ||
perl/programmation_oriente_objet_utilisation.1237078333.txt.gz · Dernière modification : 2009/03/15 00:52 de root