Chemin de classe dynamique

defiraid Messages postés 9 Date d'inscription mardi 1 juillet 2003 Statut Membre Dernière intervention 25 février 2015 - 23 mai 2013 à 17:01
defiraid Messages postés 9 Date d'inscription mardi 1 juillet 2003 Statut Membre Dernière intervention 25 février 2015 - 24 mai 2013 à 18:26
Bonjour à tous,

je cherche à créer dynamiquement un chemin de classe.

J'ai réussi à récupérer une classe dynamiquement comme suit :


specificClass = "vemd.specific::" + "GestionEvt" + type;
getDefinitionByName(specificClass).getOccurence();



qui me renvoie la classe GestionEvt du package vemd.specific selon le type fourni

par exemple vemd.specific.GestionEvtEC120 (ce sont des types d’hélicoptères)

Mais en ayant avancé dans mon projet, j'ai mis ces classes dans des packages spécifiques pour plus de clarté dans ma hiérarchie de classes.

donc maintenant, je voudrais appeler vemd.specific.EC120.GestionEvt
et là je n'y arrive plus :

j'ai essayé :


specificPath = "vemd.specific." + type+"::";
specificClass = specificPath + "GestionEvt" ;
getDefinitionByName(specificClass).getOccurence();



et erreur :
ReferenceError: Error #1065: La variable GestionEvt n'est pas définie.
        at global/flash.utils::getDefinitionByName()


pour infos, mon trace sur specificClass me donne :
vemd.specific.EC120.GestionEvt


merci de votre aide

benoit


benoit

10 réponses

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
23 mai 2013 à 17:32
Bonjour, voilà qui est bien compliqué ... tu ne viendrais pas de PHP des fois ?

Il te suffit d'importer ton chemin de classe via la commande "import" en début de classe pour y avoir accès.
Après si tu veux accéder à une propriété de ta classe, il suffit de la mettre en statique pour y accéder sans passer par son occurrence.

Mais comme ta question semble aussi claire que ta façon de programmer, peut-être n'ai-je pas compris la finalité de ta manœuvre...

Peg'
0
defiraid Messages postés 9 Date d'inscription mardi 1 juillet 2003 Statut Membre Dernière intervention 25 février 2015
23 mai 2013 à 21:03
non, pas du php, je ne sais programmer que en AS3, dont je suis spécialisé (as2 avant) depuis 2000

Les classes que je vais chercher pour les instancier (en l’occurrence des singleton) sont dans des packages (des dossiers) différents selon le type d'hélico concerné donc j'ai besoin de coder le chemin des classes de manière dynamique!

benoit
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
23 mai 2013 à 21:11
Pourquoi "de façon dynamique" ?

La seule raison pour que tu les cherches de cette façon serait de charger un swf externe et de vouloir utiliser les classes propres à cette animation .. sinon aucun interêt.

Tu importes tout le package des classes dont tu as besoin et tu les appelles tout bêtement ...
Et si tu as besoin d'un modèle commun, tu fais une classe abstraite dont hériteront tout tes hélicos et tu n'as plus de soucis d'aller chercher telle ou telle classe "dynamiquement".

Je pense que tu cherche trop compliqué pour un truc simple déjà implémenté en POO ...

Peg'
0
defiraid Messages postés 9 Date d'inscription mardi 1 juillet 2003 Statut Membre Dernière intervention 25 février 2015
24 mai 2013 à 12:15
Bonjour peg,

En fait je travail sur un simulateur d'un élément de tableau de bord d’hélico.
Pour ce faire, j'ai un framework de 80 classes répartis dans différents dossiers qui correspondent aux éléments communs à tous les hélicos.

Mais j'ai aussi des classes spécifique à un hélico, à peu près 3 ou 4 par hélico.
et j'ai 7 hélicos pour l'instant mais il doit être possible d'en rajouter au fur et à mesure.
Donc plutôt que de mettre toutes ces classes dans un package spécifique, je préférais créer un dossier pour chaque hélico.
Et du coup, j'ai mes classes spé que je dois aller chercher selon le type d'appareil (paramètres passé directement dans l'appel de la classe principale dans le fla). Le client veut un seul swf autonome sans rien autour (pas de xml, pas de swf externe...) donc tous les xml de config ont fini dans une classe pour chaque hélico.

doc selon l'hélico je dois aller chercher un package différent

benoit
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
24 mai 2013 à 14:38
Désolé, mais je ne comprend toujours pas pourquoi tu as besoin du nom de classe dynamique pour aller chercher un package différent ...

Même si tu avais 150.000 hélico dans autant de dossiers différents et même générés à la volée, tu sais parfaitement où se trouve chaque hélico et donc où est le chemin de chaque classe. (sachant qu'il n'y a qu'une classe par package de toutes façons ...)

Ta solution est de faire une classe mère abstraite pour tout les hélicos contenant les propriétés communes publiques et d'étendre chaque hélico à partir de celle-là. Peu importe le XML ou autre trucs que tu met dedans puis que tu y auras accès avec la classe de base.

Peg'
0
defiraid Messages postés 9 Date d'inscription mardi 1 juillet 2003 Statut Membre Dernière intervention 25 février 2015
24 mai 2013 à 14:47
sachant qu'il n'y a qu'une classe par package de toutes façons


non, j'ai plusieurs classes dans chaque package d'hélico

tu sais parfaitement où se trouve chaque hélico et donc où est le chemin de chaque classe


Non, le flash ne sait pas où aller chercher la classe puisqu'il n'a que le type d'hélico en paramètre.
Il ne peut aller chercher une classe dans le package EC120 que si je lui dis mais EC120, c'est le paramètres que je donne au tout début.
Quand c'est une classe dont le nom contient le nom de l'hélico mais que je connais le package (s'il est commun à tous), pas de problème mais par contre lui donner un chemin pour aller chercher dans un package propre à cet hélico c'est ça mon problème.

Ta solution est de faire une classe mère abstraite pour tout les hélicos contenant les propriétés communes publiques et d'étendre chaque hélico à partir de celle-là.

C'est ce que j'ai fait, mais je ne veux pas appeler ma classe mère. Je veux appeler la classe fille qui hérite effectivement des paramètres communs de la classe mère.

benoit
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
24 mai 2013 à 15:36
Oui, désolé pour le premier, les packages sont es dossiers de classes .. je parlais d'une définition de classe et pas de son emplacemen

Pourquoi persistes-tu à vouloir appeler une classe précise alors que la commune sert justement a en appeler plusieurs ?

Je te montre un truc :

var helico1:Sprite = new Sprite();
var helico2:Shape = new Shape();
var helico2:Bitmap = new Bitmap();

var helicos:Vector.<DisplayObject> = Vector([helico1, helico2, helico3]);

for each(var helico:DisplayObject in helicos) {
helico.x = 148;
}


Ne peux-tu pas faire quelque chose dans le genre plutôt qu'aller chercher des tonnes de trucs pas fiables ?

Peg'
0
defiraid Messages postés 9 Date d'inscription mardi 1 juillet 2003 Statut Membre Dernière intervention 25 février 2015
24 mai 2013 à 16:23
Pourquoi persistes-tu à vouloir appeler une classe précise alors que la commune sert justement a en appeler plusieurs ?


en fait je n'en appelle qu'une seule, enfin que les classes d'un seul helico donc tous dans le même package propre à l'hélico (c'est selon l'helico que voudra exporter le client)

il va dans la première frame du flash et il fait VemdMC.getOccurence(this,"EC120");
et il a son swf pour le simu de l'helico EC120.

benoit
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
24 mai 2013 à 16:32
hou-là ... c'est du bricolo ton truc ...
Le client n'a pas à modifier la source, mais à y insérer un paramètre pour que ce soit dynamique.

Ton projet n'a pas l'air très professionnel ni dans son fond, ni dans sa forme ...

Peg'
0
defiraid Messages postés 9 Date d'inscription mardi 1 juillet 2003 Statut Membre Dernière intervention 25 février 2015
24 mai 2013 à 18:26
mon client c'est le service pédagogique d'eurocopter et ils maintiennent tous les cours à jour donc il faut qu'ils puissent modifier les paramètres selon les évolutions des hélicos. Tant que c'était dans des xml externe, ça allait mais ils ne veulent rien en extérieur donc il a fallu que je rentre tous les xml de config de chaque hélico à l'intérieur d'un classe. Donc ils veulent un swf par hélico qui n'appelle aucun média externe.

de toute façon, ils recompilent tous les cours à chaque modif (1 cours pour 1 hélico = 900 fla!)

benoit
0
Rejoignez-nous