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

 C++ Discussion :

Accès à une méthode d'un objet d'une classe


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 19
    Points : 9
    Points
    9
    Par défaut Accès à une méthode d'un objet d'une classe
    Bonjour,


    La classe A est composé d'un objet de type B.
    Une classe C veut exécuter une méthode de l'objet B inclus dans la classe A.

    Je souhaiterais savoir quelle est la meilleure manière d'utiliser les méthodes pour accéder à l'objet B dans ce cas de figure.
    J'hésite entre 2 possibilités :
    1. C doit accèder à une méthode de A qui lui renvoie un pointeur sur B. Ce pointeur lui permet alors de manipuler B.
    2. C doit accéder à une méthode de A qui permet de manipuler B.

    Dans le premier cas, C doit également inclure la définition de la classe B.

    Merci d'avance pour votre aide,

  2. #2
    Membre régulier Avatar de krieg
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 75
    Points : 92
    Points
    92
    Par défaut
    Salut,
    Ton problème manque de précision, sur les droits d'accès au différent champs.
    Je pense que le plus simple est de montrer un petit bout de code.
    Bye

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 142
    Points : 154
    Points
    154
    Par défaut
    Salut,

    Le problème est encore floue, néanmoins je pense que tu devra utiliser la notion d'héritage.

  4. #4
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut
    Personnellement j'aurais tendance à faire une méthode de A qui renvoie un pointeur sur B, et manipuler cette dernière avec C. Donc solution A.

    Après ça dépend plus précisemment de ce que tu veux faire, faut voir si A et C sont de la même famille pour l'héritage.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    J'ai plusieurs cas différents où je me pose cette question.

    Voici l'un d'entre eux :

    *********

    Description des classes :
    1 classe PlateauJeu qui contient un tableau de pointeurs vers des joueurs
    1 classe Joueur qui contient différents attributs dont un objet pion
    1 classe Pion qui contient la position actuelle du pion, la position précédente, et d'autres infos

    Est-il préférable de :
    Méthode 1 :
    Créé une méthode dans Joueur qui retourne un pointeur vers le pion du joueur.
    L'accès depuis le PlateauJeu sera donc : tabJoueur[noJoueur]->getPion()->getPosition()

    Méthode 2 :
    Réalisé une méthode dans Joueur qui se charge d'aller récupérer la position du pion.
    L'accès depuis le PlateauJeu sera donc : tabJoueur[noJoueur]->getPositionPion()

    avec la méthode getPositionPion() définie comme ceci :
    int Joueur::getPositionPion(void)
    {
    return pionJoueur->getPosition();
    }

    ***********

    Je pense que la première méthode est plus adapté.

    En effet, si je dois récupérer plusieurs attributs de l'objet pion, je n'ai pas besoin de créé d'autres accesseurs dans la classe Joueur car je dispose d'un pointeur sur l'objet de type Pion.

    Tandis qu'avec la deuxième méthode, je suis obligé de créer un accesseur pour chaque attribut de pion dans la classe Joueur.


    Y a t-il d'autres possibilités? Pouvez-vous m'expliquer si mon raisonnement tient la route ou pas?

    D'avance merci,

  6. #6
    Membre régulier Avatar de krieg
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 75
    Points : 92
    Points
    92
    Par défaut
    Salut,
    tu peux aussi mettre l'attribut pion de joueur public et ainsi y accéder sans appel à une méthode.
    bye

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2007
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    Oui, mais dans ce cas la séparation des classes n'est plus garantie n'est-ce pas?

  8. #8
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    A vrai dire, toutes les possibilités énoncées dans la question de bases sont envisageables selon les différentes situations dans lesquelles tu te trouve.

    La seule réponse réellement sincère à te donner consiste à réfléchir au fait qu'il soit (éventuellement) cohérent, du point de vue de la délégation des responsabilités, de passer par un objet de type A pour aller modifier un attribut d'un objet de type B qui est inclus dans A.

    En effet, deux cas "bâteaux" se présentent:

    Soit, tu as une "simple" aggregation d'objets, avec laquelle il est cohérent d'estimer que l'objet contenu puisse avoir une "vie propre", indépendante de la collection, par exemple, une collection de "personnes".

    Il ne semble pas cohérent de demander à cette collection de personne d'aller modifier l'adresse de l'une d'elle...

    Tu devrait donc partir sur le fait que la collection permet de récupérer une personne et que tu dois demander à cette personne de déménager (ou du moins de prendre en compte son propre déménagement).

    Par contre, si tu as une composition d'objet, avec laquelle il sera souvent cohérent de demander à l'objet contenant de manipuler les objets contenu, par exemple, une figure contenant des point (2 ou 3D), tu te rend compte que, si tu modifie la position d'un point de manière "anarchique" (sans que ce soit géré par la figure), tu va littéralement dénaturer ta forme.

    De plus, un point donné ne trouve sa pleine expression que parce qu'il... appartient à une forme donnée...

    Dans ce cas, il semble cohérent de demander à la collection (la forme) d'aller manipuler les objets (les points) qu'elle contient.

    Dans le cadre d'un jeu de pion, j'aurais tendance à dire qu'il faut attaquer directement le pion, ce qui signifie qu'il faut le récupérer avant, sans déléguer la responsabilité de lui demander de se déplacer, que ce soit à une case, à l'aire de jeu ou au joueur auquel il appartient.

    N'oublie pas que, du point de vue de la case, à l'extrême limite, la seule nécessité est de savoir s'il y a un pion dessus et - le cas échéant - la couleur de celui-ci (pour permettre de déterminer si l'adversaire peut s'y rendre)

    Le fait d'accéder au pion au départ de la case sélectionnée n'est en définitive qu'une adaptation potentiellement utile (par exemple, pour le tracé de l'aire de jeu)

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/09/2008, 17h20
  2. Réponses: 2
    Dernier message: 26/01/2007, 10h50
  3. Réponses: 3
    Dernier message: 02/01/2007, 13h53
  4. [objet] appeler une méthode d'objets contenus dans un tableau (iterator ?)
    Par psychomatt dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/09/2006, 16h28
  5. [POO] Acces aux attributs d'un objet depuis une methode evenement :s
    Par NikoGJ dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/07/2006, 19h01

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