IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Module Moose - accesseur et mutateur


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 75
    Par défaut Module Moose - accesseur et mutateur
    Bonjour,

    J'ai une "encore" une petite question de cours concernant l'utilisation de moose.

    Dans le cour de djibril (que je remercie encore) on à un exemple suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #module Personne.pm
     
    has nom => (
                is => 'ro', # Attribut est lisible et non modifiable
                isa => 'Str', # Valeur de l'attribut de type chaîne de caractères
                required => 1, # Attribut obligatoire
                reader => 'obtenir_nom', # Nom de l'accesseur
                trigger => sub { $NbrPersonnes++; }, # Incrémente à chaque nouvelle personne
                );
    Dans ce que j'ai compris on a par exemple la méthode "'obtenir_nom" qui permet d'obtenir le nom .. ok

    mais uniquement dans le module.

    Car si je veux afficher le nom dans un script principal il faudra donc que je créer à nouveau une méthode pour avoir un accesseur ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #script principal
    print Personne->obtenir_nom();

    du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #module Personne.pm
     
    # accesseur obtenir_nom
    sub obtenir_nom {
                                    my $this = shift;
                                    return $this->{_NOM};
                            }
    je trouve ça dommage du coup ou je m'y prend mal quelque chose m'échappe. J'ai l'impression que l' accesseur dans l'objet nom n'est utilisable que dans le module si je comprends bien.



    Je suis en train d'apprendre, donc peut être que je me mélange les pinceaux.


    Je vous remercie

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Non, justement, le fait de simplement déclarer un "reader" dans la définition du nom de ta classe Moose fournit automatiquement l'accesseur que tu peux utiliser dans ton code utilisateur. C'est l'un des avantages de Moose par rapport aux objets Perl bruts, tu n'a même pas besoin de coder ton accesseur, il suffit de le déclarer et Moose le "code pour toi" derrière la scène (et même, dans certains cas, tu n'a même pas besoin de le déclarer, comme l'explique Djibril).

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 75
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Non, justement, le fait de simplement déclarer un "reader" dans la définition du nom de ta classe Moose fournit automatiquement l'accesseur que tu peux utiliser dans ton code utilisateur. C'est l'un des avantages de Moose par rapport aux objets Perl bruts, tu n'a même pas besoin de coder ton accesseur, il suffit de le déclarer et Moose le "code pour toi" derrière la scène (et même, dans certains cas, tu n'a même pas besoin de le déclarer, comme l'explique Djibril).

    bonjour,

    C'est bien ce qui me semblait Moose permet donc d'avoir un accesseur .
    Par contre je vois bien que l'on peut l'utiliser dans "le module", la classe pas de souci. Mais je ne vois pas comme l'appeler dans mon script principal.
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    #module Personne.pm
    has nom => (
                is => 'ro', # Attribut est lisible et non modifiable
                isa => 'Str', # Valeur de l'attribut de type chaîne de caractères
                required => 1, # Attribut obligatoire
                reader => 'obtenir_nom', # Nom de l'accesseur QUE JE VOUDRAI UTILISER
                trigger => sub { $NbrPersonnes++; }, # Incrémente à chaque nouvelle personne
                );
    danc ce cas là comment j'appelle mon accesseur dans script principal ?
    (sauf erreur de ma part) dribril dans son cours n'aborbe pas ce cas là (sauf si on crée une méthode dans notre module)

    dans ce cas là on l'appelle par
    Personne->obtenir_nom();

    mais avec la déclaration en utilisant la méthode moose avec le paramètre "reader" je ne comprends pas comment y acceder depuis mon script principal.
    Sauf bien sur en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print $Objet_Personne->{nom};
    en vous remerciant

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Par défaut
    personnellement j'aurais écrit
    reader => '_obtenir_nom', # Nom de l'accesseur QUE JE VOUDRAIS METHODE PRIVÉE d'où le tiret

    et ensuite

    print $Objet_Personne->nom;

    ce qui va déclencher l'appel à la methode privée _obtenir_nom..
    d'autant plus, si tu utilisais la propriété paresseuse "lazy" ... mais c'est une autre histoire.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Par défaut
    Citation Envoyé par vidici Voir le message
    personnellement j'aurais écrit
    reader => '_obtenir_nom', # Nom de l'accesseur QUE JE VOUDRAIS METHODE PRIVÉE d'où le tiret

    et ensuite

    print $Objet_Personne->nom;

    ce qui va déclencher l'appel à la methode privée _obtenir_nom..
    d'autant plus, si tu utilisais la propriété paresseuse "lazy" ... mais c'est une autre histoire.
    j'ai répondu un peu vite, n'ayant pas trop compris la question.. j'ai donc confondu reader avec builder, pensant que tu voulais appliquer des changements au nom en question en interne.
    effectivement reader et writer permettent de donner un nom d'accesseur different de celui que moose prévoit plus simplement.
    veuillez donc ne pas tenir compte de mon intervention, vu que je vois pas où se trouve le problème.

  6. #6
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Un accesseur est par définition une méthode d'interface, il n'y a aucune raison d'en faire une méthode privée. Et il suffit d'appeler cet accesseur depuis le programme utilisateur pour obtenir l'attribut voulu.

    Dans le script utilisateur, une fois que l'on a créé la personne $prof avec le constructeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    my $prof = Homme->new(
      { nom    => 'Tournesol',
        prenom => 'Tryphon',
        age    => 63,
      }
    );
    il suffit d'appeler (dans le programme utilisateur):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print "mon nom est " . $prof->obtenir_nom();
    pour afficher le nom, en l'occurrence "Tournesol";

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 75
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Un accesseur est par définition une méthode d'interface, il n'y a aucune raison d'en faire une méthode privée. Et il suffit d'appeler cet accesseur depuis le programme utilisateur pour obtenir l'attribut voulu.

    Dans le script utilisateur, une fois que l'on a créé la personne $prof avec le constructeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    my $prof = Homme->new(
      { nom    => 'Tournesol',
        prenom => 'Tryphon',
        age    => 63,
      }
    );
    il suffit d'appeler (dans le programme utilisateur):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print "mon nom est " . $prof->obtenir_nom();
    pour afficher le nom, en l'occurrence "Tournesol";


    MERCI !!!

    Effectivement c'est simplisme navré j'ai l'air d'un idiot mais ça fait un moment que je me casse la tête dessus.
    Merci,ça m'aide beaucoup dans la compréhension...

    je comprenais pas comment y accéder...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 124
    Par défaut
    Citation Envoyé par Lolo78 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print "mon nom est " . $prof->obtenir_nom();
    pour afficher le nom, en l'occurrence "Tournesol";
    effectivement c'est joli
    c'est plus joli mais plus long
    que d'ecrire tout simplement
    $prof->nom;
    joyeuses fêtes.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Accesseurs et mutateurs
    Par boobaie dans le forum Général Java
    Réponses: 2
    Dernier message: 05/12/2012, 13h25
  2. Mutateur et accesseur sur énumération
    Par stallaf dans le forum Débuter
    Réponses: 13
    Dernier message: 17/08/2010, 13h44
  3. Accesseur de collection dans un module de classe
    Par in dans le forum Général VBA
    Réponses: 4
    Dernier message: 17/08/2007, 18h09
  4. [Doc] Mutateurs/Accesseurs PHP5, comment faites vs ?
    Par ePoX dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 28/02/2006, 01h34
  5. Outils pour creer les accesseurs et les mutateurs
    Par MarieMtl dans le forum MFC
    Réponses: 3
    Dernier message: 03/10/2005, 17h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo