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 :

[C++] H�ritages et classes


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    �tudiant
    Inscrit en
    Ao�t 2005
    Messages
    3 905
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (�le de France)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 3 905
    Par d�faut [C++] H�ritages et classes
    Bonsoir,

    J'ai un petit probl�me de gestion de mes classes :
    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
     
    class typeMonde
    {
    protected:
    Zone* salle;
    };
     
    class Donjon : public typeMonde
    {
    private:
    int nbCle;
    };
     
    class Zone;
    {
     // ....
    };
     
    class ZoneDonjon : public Zone
    {
    // ...
    };
    Donc on a un Donjon (Donjon) qui est un type de monde (Donjon qui h�rite de typeMonde).
    Chaque monde poss�de une salle et il existe plusieurs type de salle (Zone) dont la salle Donjon (ZoneDonjon qui h�rite de Zone).

    Question : Dans la classe ZoneDonjon, j'ai besoin d'acc�der � l'attribue "nbCle" qui se trouve dans la classe Donjon. Comment faire intelligemment, sachant que j'ai besoin de modifier cet attribue dans la classe ZoneDonjon ?

    Le but est dans le cadre d'un jeu 2D, de g�rer un donjon. Et dans un donjon, il y a des salles et une seule salle qui est "active", c'est � dire la salle o� on joue. Et j'ai besoind 'avoir acc�s aux nombre de cl�s totale du donjon dans chaque salle.

    Voil�, je suis perdu dans mes classes

    Merci
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  2. #2
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par d�faut
    Citation Envoy� par Aspic Voir le message
    Question : Dans la classe ZoneDonjon, j'ai besoin d'acc�der � l'attribue "nbCle" qui se trouve dans la classe Donjon. Comment faire intelligemment, sachant que j'ai besoin de modifier cet attribue dans la classe ZoneDonjon ?
    Il y a plusieurs mani�res.
    Celle qui a ma pr�f�rence, et qui est la plus "classique" : tu ajoutes un getter et un setter (m�thodes publiques getNbCle() et setNbCle(int)) dans la classe Donjon. Ca te donne un peu de contr�le sur les acc�s et les modifications, si tu as des tests � faire pour v�rifier que les modifs sont coh�rentes par exemple.

    Sinon, tu peux d�clarer la classe ZoneDonjon ou certaines de ses m�thodes comme "friend" de Donjon, mais � mon sens c'est une br�che dans la "s�curit�" objet en C++.

    Sinon, encore pire � mon sens, tu repasses nbCle en public, c'est-�-dire que tu renonces tout-�-fait aux fonctionnalit�s de contr�le d'acc�s pour cette variable membre.

  3. #3
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    �tudiant
    Inscrit en
    Ao�t 2005
    Messages
    3 905
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (�le de France)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 3 905
    Par d�faut
    Je suis peut �tre b�te mais aucune de ses solutions ne va marcher...
    Si par exemple, je le passe en public, comment j'y acc�de dans ma classe ZoneDonjon, vu qu'il n'y a pas de liens avec la classe Donjon ?
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  4. #4
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par d�faut
    Citation Envoy� par Aspic Voir le message
    Je suis peut �tre b�te mais aucune de ses solutions ne va marcher...
    Si par exemple, je le passe en public, comment j'y acc�de dans ma classe ZoneDonjon, vu qu'il n'y a pas de liens avec la classe Donjon ?
    Ah ok, je n'avais pas compris ton probl�me.
    Eh bien je ne connais pas ton application, mais si ZoneDonjon n'est cr��e que relativement � un Donjon donn�, cela ferait sens de lui faire un constructeur prenant en param�tre un pointeur vers le donjon en question, et de le m�moriser dans une variable membre (priv�e). Ou alors, de faire ce lien plus tard via une m�thode du type setDonjon(Donjon *), ou encore de passer un Donjon* en param�tre � la fonction qui doit acc�der � nbCle... Tout d�pend du lien que tu veux faire entre l'instance de ZoneDonjon et l'instance de Donjon. Il faut que tu formalises ce lien, c'est un probl�me de conception plus qu'un probl�me de C++. Un petit gribouilli en pseudo-UML, pour prendre conscience des liens et de leurs cardinalit�s, t'aiderait sans doute.

  5. #5
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    �tudiant
    Inscrit en
    Ao�t 2005
    Messages
    3 905
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (�le de France)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 3 905
    Par d�faut
    Merci pour vos r�ponses.

    Alors effectivement, pour Koala01, tu as bien compris, la zoneDonjon g�re la partie SPECIFIQUE des "monde donjon" (exemple : portes, portes � cl�, objets sp�cifiques aux donjons comme les cl�s...) alors que la zone g�re les parties COMMUNES aux diff�rents type de monde (exemple : enemies, objets de base...).

    Et oui il doit bien y avoir une relation entre zoneDonjon et Donjon et justement je suis coinc� car je suis nul en conception et je n'ai jamais fait d'UML (je ne suis qu'en premi�re ann�e d'ing�nieur , c'est l'ann�e prochaine l'UML).

    Alors pass� un pointeur Donjon* dans zoneDonjon, j'y ai pens� mais je ne trouve pas que c'est une bonne solution �tant donn� que je n'ai besoin d'avoir acc�s qu'� un petit nombres d'attribues de la classe Donjon.

    Utilisez un DL, je ne sais pas de quoi tu voulais parler Koala01

    Utilisez les amis, je connais vaguement le principe mais on m'a dit de s'en m�fier donc � voir.

    J'ai trouv� une solution temporaire, c'est de d�clarer les attributs donc j'ai besoin en static et cr�er des getter et setter statiques pour modifier les attribues. Je ne sais pas si c'est une bonne solution mais ca marche
    Est ce que cela viole le principe d'encapsulation ? (bien que j'ai cr�� des getter et setter, n'importe qui peut modifier mes attributs...)

    Sinon je vais tenter de pr�cision mon projet :

    Je g�re un donjon dans un zelda. Pour ceux qui connaissent les zelda, il y a des salles (ou zones) dans un donjon et le principe d'un zelda c'est qu'on traverse les salles une � une en "scrollant" donc a chaque "scroll" (ou changement d'�cran si vous pr�f�rez), la classe zoneDonjon est d�truite puis recr��e avec les nouvelles infos de la zone.

    Mais il y a des portes � cl�s dans un donjon avec des cl�s. Ce sont des objets sp�cifiques aux donjons qui n'existent pas dans les autres type de monde.

    Question : O� g�rer les cl�s et l'ouverture des portes � cl� ?

    Actuellement, les cl�s sont g�r�s dans Donjon et l'ouverture des portes � cl� dans zoneDonjon puisque une porte � cl� fait partie d'une zone (ou salle).

    J'esp�re avoir �t� clair sinon n'h�sitez pas � me le dire

    Merci
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  6. #6
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Citation Envoy� par Aspic Voir le message
    Merci pour vos r�ponses.

    Alors effectivement, pour Koala01, tu as bien compris, la zoneDonjon g�re la partie SPECIFIQUE des "monde donjon" (exemple : portes, portes � cl�, objets sp�cifiques aux donjons comme les cl�s...) alors que la zone g�re les parties COMMUNES aux diff�rents type de monde (exemple : enemies, objets de base...).

    Et oui il doit bien y avoir une relation entre zoneDonjon et Donjon et justement je suis coinc� car je suis nul en conception et je n'ai jamais fait d'UML (je ne suis qu'en premi�re ann�e d'ing�nieur , c'est l'ann�e prochaine l'UML).
    Qu'est-ce qui t'emp�che de prendre un peu d'avance et de t'y int�resser par toi-m�me

    Il y a une section enti�rement d�di�e sur le site, et ce ne sont pas les tutoriaux (plus ou moins bien faits) qui manquent sur le net

    Tu remarquera d'ailleurs relativement vite que le but de tes �tudes est de te donner les bases et de "t'apprendre � apprendre" sur base du "peu" que l'on t'aura donn� (bon, j'exag�re un peu, mais je suis quand m�me pas loin de la v�rit� )

    Alors pass� un pointeur Donjon* dans zoneDonjon, j'y ai pens� mais je ne trouve pas que c'est une bonne solution �tant donn� que je n'ai besoin d'avoir acc�s qu'� un petit nombres d'attribues de la classe Donjon.

    Utilisez un DL, je ne sais pas de quoi tu voulais parler Koala01
    Je parlais d'un DP et non d'un DL...

    C'est l'abr�viation de Design Pattern, ou, si tu pr�f�re en fran�ais: patron de conception.

    Il s'agit de patrons qui reviennent de mani�re tellement r�currente dans les probl�mes de conception qu'on en est arriv� � les "standardiser", ou du moins � trouver une mani�re d'exprimer le probl�me auquel on est confront� et la solution � y apporter de mani�re claire et pr�cise

    Il existe d'ailleurs un tutoriel sur le site, mais, comme je n'ai pas l'adresse en t�te, je te conseillerais bien de faire un tour sur la page des tutoriels
    Utilisez les amis, je connais vaguement le principe mais on m'a dit de s'en m�fier donc � voir.

    J'ai trouv� une solution temporaire, c'est de d�clarer les attributs donc j'ai besoin en static et cr�er des getter et setter statiques pour modifier les attribues. Je ne sais pas si c'est une bonne solution mais ca marche
    Est ce que cela viole le principe d'encapsulation ? (bien que j'ai cr�� des getter et setter, n'importe qui peut modifier mes attributs...)
    Ouggghhh... l�, tu pars compl�tement en vrille...

    j'ai scind� la discussion de mani�re � ouvrir le d�bat sur l'amiti�, n'h�site pas � y jeter un oeil afin de te faire ton id�e

    Sinon je vais tenter de pr�cision mon projet :

    Je g�re un donjon dans un zelda. Pour ceux qui connaissent les zelda, il y a des salles (ou zones) dans un donjon et le principe d'un zelda c'est qu'on traverse les salles une � une en "scrollant" donc a chaque "scroll" (ou changement d'�cran si vous pr�f�rez), la classe zoneDonjon est d�truite puis recr��e avec les nouvelles infos de la zone.

    Mais il y a des portes � cl�s dans un donjon avec des cl�s. Ce sont des objets sp�cifiques aux donjons qui n'existent pas dans les autres type de monde.

    Question : O� g�rer les cl�s et l'ouverture des portes � cl� ?

    Actuellement, les cl�s sont g�r�s dans Donjon et l'ouverture des portes � cl� dans zoneDonjon puisque une porte � cl� fait partie d'une zone (ou salle).
    Heuuu... ne crois tu pas que tant l'ouverture des portes que la gestion des cl�s devrait �choir � tes objet de type Monde (ou d�riv�)

    Au pire, ta zone doit simplement savoir:
    • combien de cl�s il y avait � trouver
    • combien de cl�s ont �t� trouv�es
    • combien de cl�s ont �t� utilis�es
    et ce sont trois informations que le monde ne doit, � l'extr�me limite, pas retenir: il n'a "qu'�" transmettre le fait qu'une cl� est trouv�e / utilis�e � la zone qui s'occupe de sa gestion
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  7. #7
    Membre exp�riment�
    Homme Profil pro
    Analyse syst�me
    Inscrit en
    Novembre 2008
    Messages
    227
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Analyse syst�me
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 227
    Par d�faut
    Je pense que Eusebius � raison.
    C'est avant tout un probl�me de conception.
    POur moi si il parait logique que ce soit le donjon qui g�re les cl�s, il est normale que ce soit lui qui poss�de l'attribut, n�anmoins, si la classe Zone � besoin de connaitre le nombre de cl�, il serait int�ressant que tu rajoute � la classe Zone un pointeur sur le nombre de cl� g�r� par la classe TypeMonde.

    Pour savoir quelle est la meilleure solution, il faut en savoir plus sur le r�le des cl�s et pourquoi/quand la classe Zone en a besoin.

  8. #8
    Membre Expert

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 49
    Localisation : France, Bouches du Rh�ne (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par d�faut
    Citation Envoy� par Aspic Voir le message
    Bonsoir,

    J'ai un petit probl�me de gestion de mes classes :
    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
     
    class typeMonde
    {
    protected:
    Zone* salle;
    };
     
    class Donjon : public typeMonde
    {
    private:
    int nbCle;
    };
     
    class Zone;
    {
     // ....
    };
     
    class ZoneDonjon : public Zone
    {
    // ...
    };
    Donc on a un Donjon (Donjon) qui est un type de monde (Donjon qui h�rite de typeMonde).
    Chaque monde poss�de une salle et il existe plusieurs type de salle (Zone) dont la salle Donjon (ZoneDonjon qui h�rite de Zone).

    Question : Dans la classe ZoneDonjon, j'ai besoin d'acc�der � l'attribue "nbCle" qui se trouve dans la classe Donjon. Comment faire intelligemment, sachant que j'ai besoin de modifier cet attribue dans la classe ZoneDonjon ?

    Le but est dans le cadre d'un jeu 2D, de g�rer un donjon. Et dans un donjon, il y a des salles et une seule salle qui est "active", c'est � dire la salle o� on joue. Et j'ai besoind 'avoir acc�s aux nombre de cl�s totale du donjon dans chaque salle.

    Voil�, je suis perdu dans mes classes

    Merci
    Tu �nonce les relations suivantes:
    • un Donjon est un typeMonde.
    • un typeMonde poss�de plusieurs Zone
    • une ZoneDonjon est une Zone.


    Ensuite, tu poses la question : comment ZoneDonjon peut-elle obtenir des informations � partir de Donjon ?

    La r�ponse est : elle ne peut pas. Il existe une relation entre Donjon et ZoneDonjon (un Donjon contient plusieurs ZoneDonjon), mais l'inverse n'est pas vrai - et c'est tant mieux.

    Imagine que tu te r�veilles dans une pi�ce compl�tement ferm�e. Tu n'as pas de fen�tre, pas de porte visible (on a construit la pi�ce autour de toi pendant que tu dormais), tu n'entends aucun son. Bref : tu est isol�. Toi et cette pi�ce, c'est le contenu. Ce qu'il y a � l'ext�rieur de cette pi�ce, c'est le contenant.

    Pourrait-tu compter le nombre de personnes du contenant qui sont situ�es � moins de 5m du contenu ? Non, parce que tu n'a strictement aucun moyen de le savoir.

    Ton probl�me est similaire : un contenu ne peut pas savoir ce que renferme le contenant, � moins que le contenant ne l'en informe ou qu'il ait un moyen de r�cup�rer cette information par lui m�me.

    Le probl�me de la seconde solution est que �a impose qu'il existe une relation entre ZoneDonjon et Donjon. Hors il existe d�j� une relation entre Donjon et ZoneDonjon, et c'est une mauvaise id�e d'impl�menter la relation inverse (pour un tas de tr�s tr�s bonnes raisons). Donc on va �viter �a.

    La premi�re solution para�t plus int�ressante ; le contenant trouve un moyen de transf�rer des informations au contenu. Etant donn� que le contenant sait beaucoup de chose sur le contenu - et en particulier, dans ton cas, il sait ce qu'est le contenu -, il est libre d'impl�menter la fonctionnalit� qu'il souhaite pour le faire.

    Dans ton cas pr�cis, je ferais ceci :

    • Lorsqu'il contruit un ZoneDonjon, Donjon lui transmet les informations qu'il souhaite partager.
    • D�s qu'une de ces informations est modifi�e, Donjon avertit ZoneDonjon de cette modification


    En gros, le code devrait ressembler � :

    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
     
    class Dungeon
    {
      Dungeon() : info1(0), info2(0)
      {
         do N times:
           zones.add(new DungeonZone(info1, info2...) ;
      }
      void changeInfo1()
      {
         activeZone.changeInfo1(info1);
      }
    private:
      info1;
      info2;
      ...
      list<DungeonZone*> zones;
      DungeonZone* activeZone;
    };
     
    class DungeonZone
    {
    public:
      DungeonZone(info1, info2...)
      { ... }
      void changeInfo1(info1) { ... }
      void changeInfo2(info2) { ... }
    };
    Ou quelque chose de ressemblant qui correspond � tes besoins.
    [FAQ des forums][FAQ D�veloppement 2D, 3D et Jeux][Si vous ne savez pas ou vous en �tes...]
    Essayez d'�crire clairement (c'est � dire avec des mots fran�ais complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Caf�. C'est d�pass� tout �a.
    Et si vous �tes sages, vous aurez peut �tre vous aussi la chance de passer � la t�l�. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

Discussions similaires

  1. conflit d'inclusions et H�ritage de classe
    Par gedeon555 dans le forum C++
    R�ponses: 7
    Dernier message: 01/10/2006, 19h48
  2. [POO] Probl�me h�ritage des classes PHP4
    Par zana74 dans le forum Langage
    R�ponses: 2
    Dernier message: 15/08/2006, 16h00
  3. H�ritage de classes.
    Par Berzerk_ dans le forum C++
    R�ponses: 48
    Dernier message: 13/08/2006, 23h48
  4. [POO] H�ritage vs classe dans une classe
    Par robichou dans le forum Langage
    R�ponses: 4
    Dernier message: 06/08/2006, 23h51
  5. [OO] H�ritage - Mixins Classes
    Par djmalo dans le forum Langages de programmation
    R�ponses: 4
    Dernier message: 01/03/2005, 23h16

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