2008-11-07 7 views
0

J'ai des problèmes avec la conception de classes. J'ai trois classes. Une superclasse et deux sous-classes.Problème de conception de classe et d'héritage dans Flash AS3

Une sous-classe (AnimatedCharacter) est créée par flash et est utilisée pour afficher l'objet à l'écran. L'autre (CharacterPhysics) est faite par moi-même pour étendre la superclasse.

Le problème est que l'objet que j'utilise est de type AnimatedCharacter, donc je ne peux pas le mettre dans une variable de type CharacterPhysics. Ce que j'ai essayé est une sorte de pattern Decorator, en donnant à l'objet de type CharacterPhysics une référence à l'autre objet. Mais maintenant je dois remplacer toutes les méthodes de la superclasse et passer les appels de méthode à la référence. Pas une situation idéale.

Est-ce que quelqu'un sait comment résoudre ce genre de problème?

alt text http://www.freeimagehosting.net/uploads/7a95f8352c.png

+0

Les noms de AnimatedCharacter et AnimatedCharacterClass sont trop similaires - c'est très confus – Iain

Répondre

1

Je ne comprends pas tout à fait le but de cette structure de classe que vous décrivez (les noms de classe me confondez), mais en général quelques petites choses viennent à l'esprit qui pourraient vous aider:

Presque toujours la meilleure solution est d'essayer et de repenser votre modèle de classe en évaluant si vous devriez par exemple diviser les responsabilités des classes de façon alternative afin que vous puissiez mieux utiliser l'héritage et le polymorphisme.

« Le problème est que l'objet que je l'utilise, est du type AnimatedCharacter, donc je ne peut pas mettre juste dans une variable de CharacterPhysics de type. »

Si vous voulez mettre dans une variable de type CharacterPhysics, AnimatedCharacter l'ancien devrait étendre ce dernier, ou vous devriez avoir une interface commune (ou superclasse) pour les deux et puis tapez la variable en tant que tel. Si ce n'est pas possible, mon opinion est que vous devriez probablement essayer de repenser et de refactoriser toute la structure de votre classe, en supposant que vous avez une solide raison "orientée objet" de vouloir le faire en premier lieu;).

Si ce qui précède n'est pas possible, il y a quelques autres trucs que vous pouvez évaluer dans votre contexte:

  • L'utilisation de mixins peut fonctionner comme un « pauvre héritage multiple de l'homme ». Derek Wischusen a quelques exemples sur la façon de les implémenter dans AS3 au flexonrails.net. "Type de" implémentant le motif décorateur avec flash.utils.Proxy. Le problème avec cette approche est que vous reportez beaucoup de vérification d'erreurs de la compilation à l'exécution, mais la bonne chose est que vous n'avez pas à écrire manuellement les implémentations "proxy" de toutes les méthodes de l'objet "décoré" , mais écrivez juste un (callProperty()) à la place.
0

Vous pouvez interpréter une sous-classe comme une instance d'une superclasse, mais pas vice-sersa. L'avez-vous dit en arrière?

Si oui, vous pouvez utiliser:

cp VAS: CharacterPhysics;

...

var ac: AnimatedCharacter = cp Comme

AnimatedCharacter
0

Du haut de ma tête, il semble que les deux devraient être interfaces votre classe principale implémente