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 :

Objet (unique) d'une classe accessible et modifiable par ...


Sujet :

C++

  1. #1
    Membre �prouv�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    109
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 109
    Par d�faut Objet (unique) d'une classe accessible et modifiable par ...
    ... d'autres classes.

    La question pos�e est autant proche de l'UML que du C++.

    Comme la question l'indique, je voudrai avoir votre avis sur une m�thode permettant l'acc�s et la modification d'un m�me objet (donc unique) par d'autres classes :

    Exemple classique :
    - J'ai une classe compos�e d'une liste de personnes dont je souhaite par exemple effectuer des op�rations comme de l'affichage (une interface graphique), une insertion d'une nouvelle personne (une autre interface graphique), une modification d'une personne de la liste (encore une autre interface graphique)...


    La seule alternative que j'ai trouv�e, c'est ce qui suit :

    /*************** fichier header************************/

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    class ListePersonne {
     
            private :
            string nomliste;    [i]// Données-membres de la classe[/i]
            // ... etc..
     
            static ListePersonne* lpers;    [i] // donnée liée au singleton[/i]
     
            public :
            static ListePersonne* getObject(string name = "",...);   [i] /*Gestion du singleton, en argument de quoi construire une instance  */[/i]
            static ListePersonne* freeInstance();
     
     
            [i]// Autres fonction-membres + constructeur/ dest (privé) etc...[/i]
            };
     
     
    /**************** fichier source**************************/
     
    ListePersonne* ListePersonne :: lpers = NULL    [i] // Initialise à null[/i]
     
    [i]/* Appel au singleton, en cas de premier appel, on le construit sinon on renvoie l'instance déjà faite */[/i]
    ListePersonne* ListePersonne :: getObject(string name, ...) {
                         if (lpers == NULL) 
                                    lpers = new ListePersonne(name , ...);
                         return lpers;
                         }
     
    [i]/* libération de la mémoire, si besoin ... */[/i]
    void ListePersonne :: freeInstance() {
                         if (lpers != NULL) {
                                    delete lpers;
                                    lpers = NULL;
                                   };
    bon �a �a va.

    Voici la classe m�re, qui en r�alit� affiche une fen�tre mais surtout instancie la ListePersonne (par interm�diaire d'un fichier ou BD par exemple);


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    /****************** fichier header***************************/
     
    #include "ListePersonne.h"
     
    class MainInterface : public IHM {       [i]// IHM peut-être une Frame par ex[/i]
     
                  private :
                  ListePersonne* repertoire;
     
                 // .. Autres données-membres
     
     
                  public :
                  MainInterface( [i]//Données membres[/i])
                  ~MainInterface() { repertoire = NULL; }
     
                  // ... le reste
                  };
     
     
     
    /**************** fichier source***************************/
     
     
     MainInterface :: MainInterface() {
                            [i]// on crée la liste des personnes[/i]
                  repertoire = ListePersonne :: getObject(nomdelaliste etc....);
     
                  // .. Reste à initialiser;
                  }


    Voici une classe interface fille par exemple qui souhaite r�utiliser cette ListePersonne :


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    /********************* fichier header**************************/
     
    #include "ListePersonne.h"
     
    class Interfacealpha : public IHM {        [i]// cf classe mère pour IHM[/i]
     
                  private :
                  ListePersonne* repertoire;
     
                [i] // .. Autres données-membres[/i]
     
                  public :
                  Interfacealpha( [i]//Données membres[/i])
                  ~Interfacealpha() { repertoire = NULL; }  // ENCORE !!!
     
                  [i]// ... le reste[/i]
                  };
     
     
    /********************** fichier source**********************/
     
     Interfacealpha :: Interfacealpha() {
                            [i]// on récupère la liste créée (zéro arguments)[/i]
                  repertoire = ListePersonne :: getObject();
     
                 [i] // .. Reste à initialiser;[/i]
                  }
    Cette solution marche tr�s bien, seulement je me trimballe � chaque classe une donn�e-membre (ListePersonne*) dont je suis s�r qu'il y aurait moyen de s'en d�barrasser.
    En plus forc�ment par pointeur (je dois bien transmettre par adresse).

    S'il y a mieux, je suis preneur ))

  2. #2
    jmv
    jmv est d�connect�
    Membre chevronn� Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    D�tails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activit� : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par d�faut
    je n'ai pas tout lu , mais il me semble que tu utilise la m�thode habituelle pour r�aliser un lien (au sens UML) d'une classe vers une autre.

    Quand au singleton, c'est un peu lourd, est-ce vraiment n�cessaire ici ?

  3. #3
    Membre exp�riment�
    Avatar de Strab
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    338
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 338
    Par d�faut
    A partir du moment o� tu cr�e un lien entre deux objets, il y en a au moins un qui connait l'adresse de l'autre. Sinon, comment pourraienst-ils communiquer ?
    Donc, � moins que je n'ai pas compris ta question, ta m�thode me para�t bonne.

  4. #4
    Membre chevronn�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par d�faut
    Si j'ai bien compris, ton probl�me est plut�t comment g�rer les donn�es partag�es par
    plusieurs modules de ton application.
    La solution que tu proposes est AMA m�diocre. ListePersonne est un singleton
    uniquement pour pouvoir partager la m�me instance de ListePersonne entre tes classes
    d'interface.
    La m�me chose est accomplie en cr�ant l'instance � l'initialisation de l'appli et en passant
    un pointeur, ou une r�f�rence sur cette instance � chacun de ses clients.

    Effectivement, si beaucoup de donn�e de ce type sont partag�e entre beaucoup de
    classes, la liste des param�tres � passer peut devenir longue.
    Il est assez courant, de regrouper l'ensemble des donn�es partag�e par toute
    l'application au sein d'une classe 'Monde', ou bien 'Contexte'.
    Ce qui permet de ne transmettre � chaque client qu'une seule r�f�rence.

Discussions similaires

  1. R�ponses: 2
    Dernier message: 08/03/2007, 10h50
  2. [Objet OLE]Stocker une base Access dans un champ
    Par SamRay1024 dans le forum Access
    R�ponses: 4
    Dernier message: 04/04/2006, 14h23
  3. Cr�er une liste d'objets statiques dans une classe
    Par crossbowman dans le forum C++
    R�ponses: 3
    Dernier message: 13/03/2006, 09h11
  4. Recuperer un objet panel ds une classe deriv� d'une JFrame
    Par benthebest dans le forum Agents de placement/Fen�tres
    R�ponses: 2
    Dernier message: 26/12/2005, 01h57
  5. R�ponses: 2
    Dernier message: 21/07/2005, 00h44

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