
Envoyé par
nicroman
Absoluement....
Ok, merci baucoups.
Bon, alors je resume.
Là ou moi j'aurai crée une classe supplementaire CAnimWapon qui aurait dérivé à la fois de CAnimated et de CWapon (donc on se retrouve en diaman).
Et bien vous, vous créez un membre de CWapon, disons mAnim.
ok.
c'est plus simple a maintenir ? sans doute.
mais par contre, moi j'ai quand même un probleme :
1er probleme.
pour faire reference a mon projet, disons que j'ai des Wapon qui sont animated et des Wapon qui ne le sont pas (des enemis qui bougent et qui ne bouge pas, des plantes carnivores si vous preferez)
disons qu'il existe une methode draw() (ou render() peu importe le nom qu'on lui donne) cette fonction est en charge de dessiner l'objet.
moi de mon coté j'appelle p->draw() et hop la magic du C++ (le polymorphisme?) fait que le bon draw est appellé (celu ide cWapon ou celui de CanimWapon)
mais vous avec votre systeme ?
vous appeller p->draw(); de CWapon...
dans lequel vous avez un IF ou un SWITCH qui en fonction du type d'objet (ha oui tiens un membre supplementaire) et vous faites :
1 2 3 4 5 6 7 8
| CWapon::draw()
{
if (mIsAnimated) mAnim.draw();
else
{
// le draw dans le cas ou c'est pas animé
}
} |
moi je ne trouve pas celà bien.
d'ailleur je cite ici : http://www.parashift.com/c++-faq-lit....html#faq-25.4
Use inheritance only if doing so will remove if / switch statements from the caller code
que je traduit par : l'heritage c'est pas mal pour eviter des if/switch.. (c'est logique car c'est une "specialisation" on le rends plus précit, plus specialisé, il est animé, s'il fallait gerer toutes les specialité dans une seule classe on aurait une tone de If/switch)
2eme probleme.
il y a plein de parametre qui faudra sans cesse synchroniser entre la classe CWapon et ses "agragation" (objet membre)
de temps en temps il faudra lui dire que ses coordonnées ont changé (peu importe comment si c'est un objet a part ou si c'est 2 variable x et y)
i lfaudra :
1 2 3 4 5
|
mAnim.x=x;
mAnim.y=y;
// ou alors, peu importe
mAnim.setCoord(mCood); |
mais il peu y avoir d'autre parametre (cycle de vie de l'objet par exemple...)
Bref des données qui existe dans les classe CAnim et CWapon et qu'il ont en commun (que se soit par derivation d'une classe de base ou pas!) CAnim a besoin de coordonnées pour animer des objet qui sont instancié directement (est-ce un bon exemple?) et Cwapon aussi...
j'utilise le cycle de vie (status=dead) par exemple pour ne pas faire de rendu grapfique si l'objet n'existe plus...
avec la derivation en diaman, non seulement il n'y a pas besoin de les synchroniser, mais en plus il n'y a pas de redondance, car il n'y a qu'une seule variable !
voilà.
alors, qu'en pensez vous ? est-ce que je me plante ? est-ce bien celà l'agregation ? les probleme que je vois sont ils contournablent, sont'ils acceptablent pour vous ? ou n'existent pas car vous faites autrement ?
Partager