Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 18/08/2007, à 10:26

Loack62

Héritage multiple ?

Hello smile
J'aimerai demander l'avis de personne compétente en C++ au niveau de la conception.
J'aimerai réaliser un moteur 2D basique afin de faire mon jeu. J'en suis pour l'instant au niveau de la conception et voici mon soucis:

- J'ai par exemple une class Player. Cette classe représente le joueur. Le joueur doit être dessiné, et il doit également être soumis aux lois de la physique.
J'avais donc l'intention de faire deux autres classes abstraites:

-> ItemDrawable
-> ItemPhysic

La classe ItemDrawable aurait comme méthode virtuelle: Draw() [ Pour dessiner ];
et ItemPhysic: Update() [ Pour mettre à jour les données ]

A la suite de ça, j'ai deux autres class:
-> PhysicEngine
-> GraphicEngine

La class GraphicEngine contenant un vector de ItemDrawable et PhysicEngine un vector de ItemPhysic.
Mais voilà, pour cela je dois faire hérité ma class Player de 2 autres class.. ItemPhysic et ItemDrawable. J'ai entendu dire que l'héritage de 2 classes étaient pas du tout conseillé. Pensez-vous que je devrai revoir ma conception ? Ou bien dans mon cas cela ne pose pas de problème ?

#2 Le 18/08/2007, à 15:16

alexduf

Re : Héritage multiple ?

je viens du monde java, et ma réponse serait d'utiliser une Interface. Maintenant ne connaissant pas bien le C++ je ne sais pas si celle-si existent.

En Java une classe peut hériter d'une seule autre classe, mais implémenter autant d'interface que souhaité.

Hors ligne

#3 Le 19/08/2007, à 21:31

obiwankennedy

Re : Héritage multiple ?

Dans le C++, si ce sont des classes abstraites avec des méthodes abstraites , je dirais qu'il y a pas de soucis. Le grave problème de l'héritage multiple c'est faire hérité une classe D d'une classe C et B et que C et D hérite d'une troisième classe A et donc depuis la classe D on peut arrivé à la classe A par 2 chemin et là gros gros problème il faut bien taquiner le C++ pour s'en sortir mais dans ton cas ça passe.


Dans mes logiciels, j'écris ton nom.
SGNGD: SvgGd is Not GD
Rolisteam

Hors ligne

#4 Le 20/08/2007, à 08:08

Loack62

Re : Héritage multiple ?

D'accord.
Je vous remercies de vos réponses. Je vais donc continuer comme cela smile

#5 Le 20/08/2007, à 09:16

carella

Re : Héritage multiple ?

L'héritage multiple ne pose de problème ......... qu'aux écrivains de compilateur !!!
Conceptuellement c'est une notion excessivement simple à comprendre : quoi de plus naturel que de dire qu'un téléphone portable hérite des classes calculette, agenda, appareil photo, lecteur mp3 .........
Le problème pour le programmeur est un problème de nommage.
Si une classe A hérite de B et C un problème peut survenir si les classes B et C proposent des méthodes ou attributs de même nom. Pour éviter l'ambigüité pour le compilateur il faut renommer ces méthodes (un compilateur sérieux ne laisse pas passer l'appel à une méthode pour laquelle un conflit de nom est détecté)
Un problème à peine plus ardu et qui se résout de la même façon survient quand B et C héritent elles mêmes d'un même ancêtre D (ce cas s'appelle héritage répété). Là encore le renommage doit être utilisé avec quelques astuces à peine plus complexes.

Exemple de hiérarchie de classe répétée :
Soit une classe CONDUCTEUR représentant les conducteurs d'automobile avec comme attributs age et adresse
Soit deux classes CONDUCTEUR_FRANCAIS et CONDUCTEUR_ANGLAIS chacune étant héritière de CONDUCTEUR
Enfin une classe CONDUCTEUR_FRANCAIS_ANGLAIS pour ceux qui vivent dans les deux pays.
Par l'héritage répété CONDUCTEUR_FRANCAIS_ANGLAIS reçoit les attributs du grand père CONDUCTEUR donc age et adresse.
Dans le cas de l'attribut age pas besoin de renommage c'est le même.
Pour adresse il faudra surement renommer avec une clause du genre

Class CONDUCTEUR_FRANCAIS_ANGLAIS
inherit CONDUCTEUR_FRANCAIS
     rename
     adresse as adresse_francaise
     end
inherit CONDUCTEUR_ANGLAIS
    rename
    adresse as adresse_anglaise
    end

Voilà !
Malheureusement je ne connais pas le C++ mais aucun doute que ce genre de mécanisme existe.

je ne peux que conseiller d'avoir la bible de l'objet à côté de soi
Object Oriented Software Construction de Bertrand Meyer

http://archive.eiffel.com/doc/oosc/

Il y a une traduction française que je déconseille

Hors ligne

#6 Le 20/08/2007, à 10:17

AuraHxC

Re : Héritage multiple ?

Effectivement l'héritage multiple ne pose pas de réel problème.

Hors ligne

#7 Le 20/08/2007, à 13:04

alexduf

Re : Héritage multiple ?

Loack62 a écrit :

Je vais donc continuer comme cela smile

Tu devrais passer le sujet en [Résolu] en éditant le titre de ton premier post sinon la discussion va continuer sans vraiment apporter grand chose ^^

Hors ligne