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

7 réponses

1 2 3
Avatar
Emmanuel Florac
Le Sat, 18 Feb 2006 00:37:47 +0100, Eric Jacoboni a écrit :


En Ruby, on ne peut pas surcharger une méthode, mais comme il y a les
paramètres avec valeurs par défaut et les varargs on s'en passe. En
Java, il n'y a pas les paramètres avec valeurs par défaut, donc on
surcharge souvent. En C++ et en Ada, on a les deux.


Aaaaah. BOn, alors je n'utilise jamais la surcahrge et toujours la
redéfinition. Et je n'ai pas l'impression d'être le seul :)

--
L'Algérie était au bord du gouffre, aujourd'hui elle a fait un grand pas
en avant.
Aït Ahmed.

Avatar
Eric Jacoboni
Emmanuel Florac writes:

Aaaaah. BOn, alors je n'utilise jamais la surcahrge et toujours la
redéfinition. Et je n'ai pas l'impression d'être le seul :)


Ben, la surcharge avec un langage sans typage statique, c'est un peu
difficile de toutes façons...

Mais les deux ne résolvent pas les mêmes problèmes.

--
Eric Jacoboni, ne il y a 1443705924 secondes

Avatar
Emmanuel Florac
Le Sat, 18 Feb 2006 13:27:00 +0100, Eric Jacoboni a écrit :


Ben, la surcharge avec un langage sans typage statique, c'est un peu
difficile de toutes façons...



Aaaah OK. Faut que je me remette au C++ moi :)

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

Avatar
Chris

En fait, la protection du code, des attributs, etc. est un
contrat. Dans la plupart des langages, c'est le compilateur qui
l'assure. En Perl, c'est le programmeur qui le respecte (ou non).



<troll>
Perl le langage qui laisse la maîtrise au programmeur :)
</troll>

A+
chris

Avatar
Paul Gaborit
À (at) Sat, 18 Feb 2006 00:37:47 +0100,
Eric Jacoboni écrivait (wrote):
La surcharge, c'est la possibilité d'avoir deux sous-programmes
portant le même nom (certains langages permettent aussi de surcharger
les opérateurs prédéfinis). En 1983, Ada le permettait déjà.


Deux sous-programmes/méthodes/fonctions mais n'ayant pas les mêmes
types d'attributs et/ou le même type de valeur de retour (pas la même
signature).

Perl ne distinguant ni le type des attributs ni le type de retour des
fonctions ne connait pas la surcharge de méthodes. Perl ne surcharge
que les opérateurs. Et encore, il ne reconnait que le "type" du
premier opérande (sauf lorsque ce n'est pas un objet et dans ce cas le
"type" de l'éventuel second opérande compte).



Quand on utilise un langage OO, la surcharge c'est donc la possibilité
d'avoir deux méthodes *d'une même classe* portant le même nom
(utilisation fréquente pour les constructeurs, notamment).


En Perl, les constructeurs ne portant pas un nom prédéfini, on les
nomme différement... ou alors on écrit une méthode qui reconnait ses
paramètres à l'exécution.

La redéfinition, c'est le fait qu'une classe fille redéfinit une
méthode de sa classe mère[...]


C'est ce que j'appelle de la surdéfinition. Pour moi, la redéfinition
consiste à redéfinir la même méthode (dans la même classe, avec l es
mêmes paramètres si ils font partie de la définition). De nombreux
langages classiques (Java, C++) ne permettent pas la redéfinition (ou
alors en passant par des artifices lors de l'édition des liens par
exemple).

En Perl, on peut redéfinir toutes les méthodes/fonctions (même les
builtin qui existent alors toujours dans CORE::...) mais pas les
opérateurs de base.

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

Avatar
Eric Jacoboni
Paul Gaborit writes:

La redéfinition, c'est le fait qu'une classe fille redéfinit une
méthode de sa classe mère[...]


C'est ce que j'appelle de la surdéfinition. Pour moi, la redéfinition
consiste à redéfinir la même méthode (dans la même classe, avec les
mêmes paramètres si ils font partie de la définition). De nombreux
langages classiques (Java, C++) ne permettent pas la redéfinition (ou
alors en passant par des artifices lors de l'édition des liens par
exemple).


Histoire de termino... Pour moi (et visiblement pour pas mal de gens
que je connais aussi), "override" se traduit par « redéfinir » dans ce
contexte. La surcharge, c'est "overload".

Et "override", c'est le fait qu'une classe redéfinisse une méthode de
sa classe mère (surdéfinir n'est pas français).

Voir, par exemple,
<http://en.wikipedia.org/wiki/Method_overriding_%28programming%29>

Mais j'imagine que ça doit être comme "expression rationnelle" et
"expression régulière" : une guerre de traduction (bien que seule la
première soit correcte...).

Moi, un bouquin en français qui me parle de redéfinition pour décrire
le fait que deux méthodes portent le même nom dans une même classe, je
ne l'achète pas, en tous cas. Dans redéfinir, il y a "re", qui
implique qu'une définition existe déjà, ce qui n'est pas le cas dans
une même classe puisqu'il n'y a pas d'ordre intrinsèque dans la
définition des méthodes. Ce n'est donc pas tant le « surdéfinir » qui
me gène (encore que cela revient à utiliser un mot inexistant alors
qu'il en existe déjà un) que ton utilisation de « redéfinir », mais
bon...

--
Eric Jacoboni, ne il y a 1444484227 secondes


Avatar
Paul Gaborit
À (at) Mon, 27 Feb 2006 13:54:23 +0100,
Eric Jacoboni écrivait (wrote):
Moi, un bouquin en français qui me parle de redéfinition pour décri re
le fait que deux méthodes portent le même nom dans une même classe, je
ne l'achète pas, en tous cas.


On peut être d'accord...

Dans redéfinir, il y a "re", qui implique qu'une définition existe
déjà, ce qui n'est pas le cas dans une même classe puisqu'il n'y a
pas d'ordre intrinsèque dans la définition des méthodes. Ce n'est
donc pas tant le « surdéfinir » qui me gène (encore que cela revi ent
à utiliser un mot inexistant alors qu'il en existe déjà un) que ton
utilisation de « redéfinir », mais bon...


Les mots français utilisés en informatique (comme dans plein d'autres
domaines) n'ont jamais leur sens commun ('surcharge' par exemple). Ce
n'est donc pas un problème d'en créer de nouveau (comme 'initialiser'
par exemple).


Pour faire le point :

- 'surcharger' : donner plusieurs définitions d'une même fonction ou
méthode ou d'un même opérateur mais portant sur des paramètres de
natures différentes. (Pas possible en Perl pour les
fonctions/méthodes.)

- 'redéfinir' (ou pour moi 'surdéfinir') : donner une nouvelle
définition d'une méthode dans une classe qui hérite d'une autre classe
qui donne déjà une définition de cette méthode. L'intérêt du 's ur'
dans 'surdéfinir' est qu'il met bien en avant la notion d'empilement
de l'héritage...

- pour moi 'redéfinir' (et pour toi ?) : donner une nouvelle
définition d'une fonction ou méthode existante en perdant au passage
l'ancienne définition (Perl émet d'ailleurs un message : 'Subroutine
redefined').

En Perl, on pourrait presque dire que la redéfinition pour toi ou pour
moi la surdéfinition de méthode est en fait le seul cas de surcharge
de fonction (c'est exactement comme cela que procède le
compilateur... puisque une méthode est en fait une fonction dont le
premier argument est implicitement l'objet lui-même).

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

1 2 3