je suis toujours pas sûr de comprendre ...
déjà plutôt que de dire "j'ai un problème X je veux utiliser une méthode Y mais ne pas violer la convention Z", tu devrais dire "je veux faire un système d'animation qui supporte ça et ça, qu'on utilise comme ça". (d'ailleurs c'est un des principes de l'"extreme" programming : écrire du code qui utilise les classes qu'on veut écrire, afin de voir si l'interface est OK).
parce que là, dériver d'un système d'animation, je trouve toujours que ça n'a pas grand chose à faire là, que ça alourdit la chose.
par exemple dans 3d studio max, tu as une classe objet3d, une classe node qui recense une position dans l'espace et un objet3d. -> le même objet peut être affiché plusieurs fois sans avoir à être dupliqué (ou à hacker du code spécifique). c'est la position de la node qui est animée.
et arrête de vouloir tout ranger dans une jolie hiérarchie
l'objet est utilie pour modéliser certains problèmes, pas pour d'autres. par exemple, un problème qui (a priori) a l'air tout con : tu veux utiliser une ellipse, un cercle. dérives-tu cercle de éllipse ou l'inverse ?
* si tu dérives cercle de éllipse, ta classe éllipse a deux méthodes : setXRadius(), setYRadius(). mais cercle, dérivé de ellipse, viole cette conception, vu qu'il n'a qu'un seul radius.
* si tu dérives ellipse de cercle, tu as une méthode setRadius() dans dans cercle. que rajoutes-tu dans ellipse ? setRadius2() ? ça modifie le radius x, y ?
enfin, le problème est plus complexe, tu n'as qu'à jeter un oeil aux multiples threads sur groups.google : http://groups.google.com/groups?q= [...] %20ellipse
je t'entends dire "et pourquoi tu racontes tout ça ? ça n'a qu'un loitain rapport avec mon problème tout con d'animation" ! très simple. mettons que ta classe bézier interpole une position bézier. maintenant, tu veux améliorer ton moteur et rajouter la possibilité d'afficher des courbes bézier. que fais-tu, une nouvelle classe qui dérive de translation::bézier pour afficher ta courbe ? pourquoi pas, mais c'est très moche. et l'interface d'animation start() et stop(), tu n'en as que faire. encore mieux, tu veux utiliser translation::bezier de telle sorte qu'elle prenne en entrée une courbe de ta scène : tu peux dessiner une courbe bézier en 3d, tu veux que ton objet la suive. que dérives-tu, comment, pourquoi, combien de temps vas-tu te prendre la tête avec ce genre de problème qui avait l'air tout simple ?
-> même solution que pour tes images, _séparer_. tu veux une classe qui te donne une sorte une position 3d interpolée d'une courbe en fonction d'un paramètre t. tu veux une classe qui affiche cette courbe dans la scène. tu veux une classe d'animation qui donne une nouvelle position à un objet. parmi ces classes d'animation, une qui peut utiliser une courbe, quelle que soit son origine (dans les 'ressources' du moteur, dan sun objet de la scène, etc). ça répondra aux besoins cités dans ce message. par contre, ce n'est pas la solution ultime là non plus.
en "relation reading" et pour illustrer le "ne pas utiliser une techno X JUSTE PARCE QUE", un article de jamie zawinski (ex codeur netscape) http://www.jwz.org/doc/mailsum.html , qui raconte comment netscape est passée par justement une phase objets & databases & hype & bloatware & au final c'était plus lent et plus buggé.