Classes virtuelles en ActionScript 2
Par -Alexandre LEGOUT aka LAlex- le vendredi, septembre 12 2003, 17:31 - AS2 - Lien permanent
Les interfaces, c'est bien joli, mais il faut bien avouer que les classes virtuelles sont quand-même bien pratiques ... Pour ceux qui ne connaissent pas, il s'agit en fait d'un mélange entre les classes et les interfaces : on ne peut pas créer d'instance d'une classe virtuelle, mais elle contient du code, et pas uniquement les signatures des méthodes comme les interfaces...
Pour pouvoir les implémenter, il y a deux solutions
- Créer une classe normale, et faire confiance au programmeur pour ne pas l'instancier ... (je vous dis tout de suite : c'est la mauvaise solution :D)
- Créer une classe avec un constructeur privé (private). Le seul problème est que la classe peut être instanciée quand même grace à une petite astuce qui permet l'instanciation dynamique.
Voici un exemple de classe virtuelle en AS2 :
class VirtualClass {
private var _p:Number;
// Constructeur privé
private function VirtualClass (p:Number) {
_p = p;
}
public function myMethod() {
return _p;
}
}
class FinalClass extends VirtualClass {
// Constructeur public faisant appel au constructeur
// de la super classe.
public function FinalClass(p:Number) {
super(p);
}
}// Fonctionne trés bien
myFinal = new FinalClass(10);
trace(myFinal.myMethod());
// Erreur à la compilation
myVirtual = new VirtualClass(10);
// Astuce pour instancier la classe virtuelle
myVirtual = new _global["VirtualClass"](10);
trace(myVirtual.myMethod());
L'astuce vient du fait que le compilateur ne peut pas détecter quelle est la classe qui va être instanciée quand on utilise la notation entre crochets, car la valeur entre les crochets peut être dynamique (le contenu d'une variable par exemple), et donc ne sait pas que le constructeur est privé. Car le compilateur n'est en fait qu'un traductauer en code AS1, qui contient des points de blocage si on essaie d'accéder à une propriété ou méthode privée ...
Commentaires
c'est vraiment un truc que j'attendais depuis longtemps, ça dans Flash!
Toujours à devoir créer des composants vides en Flash 6 pour me constituer des bibliothèques virtuelles de variables et de codes as.
Et dire que je voies tous mes collègues foutres le code sur le _root de la scène. Ca va changer beaucoup de chose, ça!
Hello


[Roikku] Tu peux être plus clair quand tu dis :
. Je vois pas le rapport avec les classes Virtuelles ?
Sur MX avec le système de package de Moock, tu obtiens en gros la même gestion du code et des classes qu'avec l'AS2 et pour le moment je bosse encore avec en attendant mon prochain projet tout en AS2. C'estclair que les #include, c'est un peu contraignant mais sur MX en évitant certains bug (faire un saut de ligne à la fin des fichiers AS et ne pas les finir par ";") tout se passe bien.
bye
http://moock.org/webdesign/lectures/ff2003Workshop/ (faut tout bien lire)
Fil des commentaires de ce billet