Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Liste des instances d'une classe

10 réponses
Avatar
xavier
Bonjour,

Je ne suis pour l'instant qu'utilisateur de l'interface OOP de Perl,
mais le projet auquel je m'attaque va m'amener à créer ma ou mes propres
classes.

Comme ce sont des objets graphiques, je vais avoir besoin d'une méthode
"overlap" pour savoir s'il y a du monde là où je dessine.

En C++, je faisais ça simplement en créant un attribut de classe
(static) qui était au choix un tableau ou une liste chaînée des
instances.

Je ne voudrais pas avoir à réinventer la roue et savoir si un tel
mécanisme listant les instances d'une classe est déja présent dans Perl.

Merci,

--
XAv
In your pomp and all your glory you're a poorer man than me,
as you lick the boots of death born out of fear.
(Jethro Tull)

10 réponses

Avatar
Paul Gaborit
À (at) Mon, 27 Dec 2010 19:54:17 +0100,
(Xavier) écrivait (wrote):

En C++, je faisais ça simplement en créant un attribut de classe
(static) qui était au choix un tableau ou une liste chaînée des
instances.

Je ne voudrais pas avoir à réinventer la roue et savoir si un tel
mécanisme listant les instances d'une classe est déja présent dans Perl.



Non, il n'y a rien de ce genre par défaut. Mais une variable gloable à
un package se comportera exactement comme un attribut de classe.

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Avatar
xavier
Paul Gaborit wrote:

Non, il n'y a rien de ce genre par défaut. Mais une variable gloable à
un package se comportera exactement comme un attribut de classe.



OK, merci !

--
XAv
In your pomp and all your glory you're a poorer man than me,
as you lick the boots of death born out of fear.
(Jethro Tull)
Avatar
espie
In article <1ju6bx9.1nyuzv1p6950mN%,
Xavier wrote:
Bonjour,

Je ne suis pour l'instant qu'utilisateur de l'interface OOP de Perl,
mais le projet auquel je m'attaque va m'amener à créer ma ou mes propres
classes.

Comme ce sont des objets graphiques, je vais avoir besoin d'une méthode
"overlap" pour savoir s'il y a du monde là où je dessine.

En C++, je faisais ça simplement en créant un attribut de classe
(static) qui était au choix un tableau ou une liste chaînée des
instances.

Je ne voudrais pas avoir à réinventer la roue et savoir si un tel
mécanisme listant les instances d'une classe est déja présent dans Perl.



Apres, il y a des gens qui ont reinvente une roue dont on dit pas mal
de bien.
http://www.iinteractive.com/moose/

Ca depend un peu a quel point tu veux tout faire a la main ou pas...
Avatar
xavier
Marc Espie wrote:

Apres, il y a des gens qui ont reinvente une roue dont on dit pas mal
de bien.
http://www.iinteractive.com/moose/



Oui, pas mal effectivement...

Ca depend un peu a quel point tu veux tout faire a la main ou pas...



Mais ça a l'air un peu overkill pour mon projet...

Merci de l'info, je la garde sous le coude...

--
XAv
In your pomp and all your glory you're a poorer man than me,
as you lick the boots of death born out of fear.
(Jethro Tull)
Avatar
Paul Gaborit
À (at) Tue, 28 Dec 2010 18:09:57 +0100,
(Xavier) écrivait (wrote):

Marc Espie wrote:

Apres, il y a des gens qui ont reinvente une roue dont on dit pas mal
de bien.
http://www.iinteractive.com/moose/



Oui, pas mal effectivement...

Ca depend un peu a quel point tu veux tout faire a la main ou pas...



Mais ça a l'air un peu overkill pour mon projet...

Merci de l'info, je la garde sous le coude...



Perl ne propose (sans imposer) que les mécanismes de base pour faire ce
qu'on veut ou presque en orienté objet.

Si on batit tout soi-même à partir de cela, on a l'intérêt de faire
exactement ce qu'on veut au risque de ne pas le faire de manière
toujours efficace mais en comprenant parfaitement ce qu'il y a derrière
chaque mécanisme.

À l'inverse, en prenant un module comme Moose comme base de départ, il
n'y a pas à tout (ré)écrire et donc on y gagne énormément en temps
d'écriture mais le cadre est imposé et il faut l'adopter même si on ne
comprend pas tout ce qu'il y a derrière.

Adopter le premier point de vue est intéressant pour apprendre Perl et
pour de tous petits projets. Le second point de vue vise l'efficacité
mais nécessite de choisir son ou ses modules de départ et de bien les
connaître.

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
Avatar
xavier
Paul Gaborit wrote:

Adopter le premier point de vue est intéressant pour apprendre Perl et
pour de tous petits projets. Le second point de vue vise l'efficacité
mais nécessite de choisir son ou ses modules de départ et de bien les
connaître.



Exactement comme à l'époque où je codais des applis en C++ : pour les
gros projets, j'utilisais le framework de l'éditeur de mon IDE (Think
Class Library, ça nous rajeunit pas :-) Pour les petits, j'utilisais mon
framework maison qu'éviemment je connaissais mieux.

--
XAv
In your pomp and all your glory you're a poorer man than me,
as you lick the boots of death born out of fear.
(Jethro Tull)
Avatar
espie
In article ,
Paul Gaborit <Paul.Gaborit+ wrote:
Si on batit tout soi-même à partir de cela, on a l'intérêt de faire
exactement ce qu'on veut au risque de ne pas le faire de manière
toujours efficace mais en comprenant parfaitement ce qu'il y a derrière
chaque mécanisme.

À l'inverse, en prenant un module comme Moose comme base de départ, il
n'y a pas à tout (ré)écrire et donc on y gagne énormément en temps
d'écriture mais le cadre est imposé et il faut l'adopter même si on ne
comprend pas tout ce qu'il y a derrière.

Adopter le premier point de vue est intéressant pour apprendre Perl et
pour de tous petits projets. Le second point de vue vise l'efficacité
mais nécessite de choisir son ou ses modules de départ et de bien les
connaître.



Comme toujours en perl, il y a plus d'une facon de faire les choses.

L'existence de Moose, c'est juste une info interessante pour le debutant (en
perl), histoire de savoir qu'il y a deja toute une culture (enfin, plusieurs)
derriere la creation de code objet en perl.

J'aurais du aussi parler du pattern 'inside-out perl objects'.

Perso, je trouve que c'est une excellente chose que perl "de base" ne
sache a peu pres rien faire cote objets et expose tous les mecanismes
necessaires. C'est vraiment dans l'esprit de smalltalk, et ca a permis a
des tonnes de gens de faire des choses tres sympathiques avec.
Avatar
xavier
Marc Espie wrote:

J'aurais du aussi parler du pattern 'inside-out perl objects'.



Ah oui, tiens, cette approche est très intéressante...

--
XAv
In your pomp and all your glory you're a poorer man than me,
as you lick the boots of death born out of fear.
(Jethro Tull)
Avatar
perlgenome
Voici une doc sur Perl et la POO : http://djibril.developpez.com/tutoriels/perl/poo/
Avatar
espie
In article ,
perlgenome wrote:
Voici une doc sur Perl et la POO :
http://djibril.developpez.com/tutoriels/perl/poo/



Pas trop perl dans l'ame, cette introduction. Il y a pas mal de choses
qui sont presentees comme "quasi-automatiques", alors qu'on a vachement le
choix (le coup du ref($class) || $class, par exemple, c'est pas toujours
approprie de pouvoir faire $object->new, vaut mieux meme se poser
serieusement la question)

Et j'ai du mal a prendre au serieux un tuto qui parle tres tres vite
d'heritage multiple, mais qui deconseille l'utilisation d'AUTOLOAD...

(alors que l'heritage multiple est tres souvent source d'emmerdes sans
nom, et se remplace par plein d'autres mecanismes, et qu'AUTOLOAD est
vachement utile pour implementer simplement plein de patterns. Tiens,
au hasard, visitor, par exemple:

sub AUTOLOAD
{
our $AUTOLOAD;
my $fullsub = $AUTOLOAD;
(my $sub = $fullsub) =~ s/.*:://o;
return if $sub eq 'DESTROY'; # special case
my $self = $_[0];
# verify it makes sense
if ($self->element_class->can($sub)) {
no strict "refs";
# create the sub to avoid regenerating further calls
*$fullsub = sub {
my $self = shift;
$self->visit($sub, @_);
};
# and jump to it
goto &$fullsub;
} else {
die "Can't call $sub on ".ref($self);
}
}