OVH Cloud OVH Cloud

Perl et POO

27 réponses
Avatar
Delf
Bonjour,

Je souhaite réaliser un script Perl mais orienté objet.

J'ai déjà fait des petits scripts pour automatiser des tâches mais là,
j'envisage de faire un ensemble de modules (classes) suivant la POO.

Est-ce-que Perl s'y prête bien ?
Merci.

--
Delf

10 réponses

1 2 3
Avatar
Jacques Caron
Salut,

On Mon, 06 Feb 2006 14:55:09 +0100, Delf wrote:

Je souhaite réaliser un script Perl mais orienté objet.


Ca va donc être un (ou plusieurs) module(s) qui vont décrire des classes.

J'ai déjà fait des petits scripts pour automatiser des tâches mais là,
j'envisage de faire un ensemble de modules (classes) suivant la POO.

Est-ce-que Perl s'y prête bien ?


Oui.

perldoc perltoot
perldoc perlboot
perldoc perlobj

etc.

Jacques.
--
Oxado http://www.oxado.com/

Avatar
Delf
Jacques Caron wrote:

Ca va donc être un (ou plusieurs) module(s) qui vont décrire des classes.


Oui.

perldoc perltoot
perldoc perlboot
perldoc perlobj


Justement, j'étais en train de lire ceci :

http://search.cpan.org/dist/perl/pod/perltoot.pod

Je trouve quelque peu 'bizarre' :)

--
Delf

Avatar
Francois
"Delf" a écrit dans le message de news:
43e76208$0$1218$

Justement, j'étais en train de lire ceci :
http://search.cpan.org/dist/perl/pod/perltoot.pod
Je trouve quelque peu 'bizarre' :)


Pourtant c'est clair et limpide !

--
Francois

Avatar
Paul Gaborit
À (at) Mon, 06 Feb 2006 15:50:09 +0100,
Delf écrivait (wrote):
Jacques Caron wrote:

Ca va donc être un (ou plusieurs) module(s) qui vont décrire des classes.


Oui.

perldoc perltoot
perldoc perlboot
perldoc perlobj



J'y ajouterais perlref pour mieux comprendre le reste...

Justement, j'étais en train de lire ceci :

http://search.cpan.org/dist/perl/pod/perltoot.pod

Je trouve quelque peu 'bizarre' :)


Ça dépend un peu de vos connaissances en OO. Si vous n'avez jamais
fait de OO, il vaut mieux mieux commencer par perlboot. Si vous
connaissez déjà les concepts d'OO mais en ayant utilisé un autre
langage OO alors perltoot est bien.

Ce qu'il faut bien comprendre c'est que Perl n'impose quasiment aucun
mécanisme OO a priori. C'est vous qui choisissez l'implémentation de
l'objet, l'héritage ou non, la manière de passer les paramètres,
etc. Il y a des manières classiques de faire mais ce n'est pas Perl
qui les imposent, c'est l'usage qui les proposent (ou des modules
comme 'base' ou 'field').

Toutes ces documentations (perlboot, perltoot, perlobj et perlref)
existent en français (cf. signature).

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>


Avatar
Delf
Paul Gaborit wrote:

Ça dépend un peu de vos connaissances en OO. Si vous n'avez jamais
fait de OO, il vaut mieux mieux commencer par perlboot. Si vous
connaissez déjà les concepts d'OO mais en ayant utilisé un autre
langage OO alors perltoot est bien.


Le bizarre portait sur la création des classes, différentes de celles
que l'on peut déclarer en de C++, C# ou Java :)

Je trouve la syntaxe assez space, comme toute la syntaxe de Perl
d'ailleurs :)

Ce qu'il faut bien comprendre c'est que Perl n'impose quasiment aucun
mécanisme OO a priori. C'est vous qui choisissez l'implémentation de
l'objet, l'héritage ou non, la manière de passer les paramètres,
etc.


Oui, il va falloir que je regarde ça de plus prêt.
Merci.

--
Delf

Avatar
Paul Gaborit
À (at) Mon, 06 Feb 2006 17:46:51 +0100,
Delf écrivait (wrote):
Le bizarre portait sur la création des classes, différentes de celles
que l'on peut déclarer en de C++, C# ou Java :)


Perl n'a pas de notion de classes. Il y a juste des espaces de noms
(via 'package') qu'on décide d'utiliser comme des classes on non. Il y
a aussi la notion de bénédiction (via 'bless') qui permet d'associer
une référence à un espace de noms. À partir de là, cette référence
peut-être considérée comme une instance de la classe qu'on associe à
cet espace de nom. Mais ce n'est qu'une manière de voir les choses.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Chris
Bonjour,

Je souhaite réaliser un script Perl mais orienté objet.

J'ai déjà fait des petits scripts pour automatiser des tâches mais là,
j'envisage de faire un ensemble de modules (classes) suivant la POO.

Est-ce-que Perl s'y prête bien ?
Merci.

Oui plutôt bien mais attention après avoir fait de l'objet sous perl

c'est dur de revenir sur un autre langage.

En fait une possibilité de perl que je trouve géante est les attributs
dynamique !

Exemple :

## ---------------
## Classe de BASE
## ---------------
package CLASS;

sub new
{
my ( $class, %arg) = @_;
bless %arg, $class;
}

## --------------------
## La classe REC_SET
## Classe Pour SQL
## --------------------
package REC_SET;
@ISA = qw{CLASS};

sub init
{
my ( $self, $table ) = @_ ;

$self->{query} = ""; # la requete
$self->{status} = 0 ; # 0 => Erreur / 1 => Ok
$self->{msg} = ""; # Message Erreur

$self->{col} = []; # Les colonnes
}

## On utilise

my $sql = new REC_SET();

$sql->{status} = 0;
$sql->{msg} = "";
$sql->{query} = $QUERY;

$sql->{table} = 'TEST1'; => création d'un attribut a la volée

En fait perl permet de comprendre qu'un objet n'est qu'une
variable/pointeur/reference identifié ou sérialisée ou benie (bless)
comme on veut

ya pas plus souple

Question d'ailleurs existe t il d'autres langages ayant cette
"particularité" ?

A+
chris

Avatar
Emmanuel Florac
Le Thu, 16 Feb 2006 11:27:24 +0100, Chris a écrit :


ya pas plus souple


Ça a des inconvénients, comme de ne pas permettre facilement de
protéger les attributs (à part utiliser des closures, ou des objets
"inside-out"). Par contre après avoir trimé des années sur Java, C++,
etc, ce n'est qu'en abordant la POO sous Perl que j'ai vraiment compris ce
que c'était et comment ça marche vraiment !

--
Quis, quid, ubi, quibus auxiliis, cur, quomodo, quando

Avatar
Nicolas George
Emmanuel Florac wrote in message
:
Ça a des inconvénients, comme de ne pas permettre facilement de
protéger les attributs (à part utiliser des closures, ou des objets
"inside-out"). Par contre après avoir trimé des années sur Java, C++,
etc, ce n'est qu'en abordant la POO sous Perl que j'ai vraiment compris ce
que c'était et comment ça marche vraiment !


Le plus agréable, je trouve, et qui manque à peu près partout ailleurs (il
paraît que javascript a vaguement la même possibilité, mais je n'ai pas
vérifié), c'est qu'un module puisse ajouter des méthodes à une classe
existante.

Avatar
Emmanuel Florac
Le Fri, 17 Feb 2006 00:34:23 +0000, Nicolas George a écrit :


Le plus agréable, je trouve, et qui manque à peu près partout ailleurs (il
paraît que javascript a vaguement la même possibilité, mais je n'ai pas
vérifié), c'est qu'un module puisse ajouter des méthodes à une classe
existante.


Ça c'est l'héritage et l'overloading, que je sache tous les langages
OO le permettent :)

--
L'esprit qu'on veut avoir gâte celui qu'on a.
Jean-Baptiste Louis Grisset.

1 2 3