J'ai rencontré un petit problème avec la hiérarchie de mes classes, dans une application WPF. Il s'agit d'un de ces problèmes où deux arbres d'héritage se rejoignent, et où vous ne trouvez pas de moyen logique pour que l'héritage fonctionne correctement. sans l'héritage multiple. Je me demande si quelqu'un a une idée brillante pour faire fonctionner ce genre de système, sans le rendre impossible à suivre ou à déboguer.
Je suis un ingénieur de bas niveau, donc ma première pensée est toujours, "Oh ! je vais juste écrire certaines de ces classes en C++ natif, et les référencer en externe ! Je pourrai alors m'amuser à la vieille école de l'OO". Hélas, cela n'aide pas lorsque vous avez besoin d'hériter de contrôles gérés...
Permettez-moi de vous montrer un extrait de mon diagramme de classe actuel :
____________________________________ _____________________________________
| CustomizableObject | | System.Windows.Controls.UserControl |
|____________________________________| |_____________________________________|
| string XAMLHeader() | ▲
| string XAMLFooter() |◄--┐ |
| CustomizableObject LoadObject() | \ |
| <Possible other implementations> | \ |
|____________________________________| \ |
▲ ▲ \ |
| | \ |
| | \ |
_________________ ______________________ \ _____________________
| SpriteAnimation | | SpriteAnimationFrame | └---| CustomizableControl |
|_________________| |______________________| |_____________________|
▲ ▲
| |
| |
________ _____________
| Sprite | | SpriteFrame |
|________| |_____________|
Le problème est assez clair : la séparation des arbres d'objets CustomizableObject et CustomizableControl --- et l'insertion de UserControl dans l'un de ces arbres, mais pas dans les deux.
Il n'y a aucun sens pratique à déplacer l'implémentation de CustomizableObject dans ses classes dérivées, puisque l'implémentation ne varie pas par classe. De plus, il serait vraiment déroutant de l'avoir implémentée plusieurs fois. Donc je ne veux vraiment pas faire de CustomizableObject une interface. La solution de l'interface n'a aucun sens pour moi. (Les interfaces ont jamais n'a pas vraiment eu de sens pour moi, pour être honnête...)
Donc je le répète, quelqu'un a une idée brillante ? Cette fois-ci, je suis vraiment dans le pétrin. J'aimerais en apprendre davantage sur la façon de faire fonctionner les interfaces AVEC mon arbre d'objets, plutôt que contre lui. Je fais ce simple moteur de sprites en utilisant WPF et C# comme un exercice solide, plus qu'autre chose. C'est tellement facile à résoudre en C++ - mais je dois trouver comment résoudre ces problèmes dans un environnement géré, plutôt que de jeter mes mains en l'air et de revenir à Win32 dès que les choses se compliquent.