Propriétés virtuelles et méthodes
Par -Alexandre LEGOUT aka LAlex- le vendredi, août 20 2004, 16:00 - AS2 - Lien permanent
Dans un post précédent, on me demandait s'il n'était pas plus pratique de créer directement des propriétés virtuelles plutôt que des méthodes accesseurs et des propriétés virtuelles qui utilisent ces méthodes. Ma réponse est simple : NON !
C'est tout à fait flagrant dans le cadre de la problématique qui se pose à moi actuellement. Je désire créer une classe qui pourrait prendre en entrée un objet "affichable" qu'il est possible de positionner et de déplacer au moyen de méthodes prédéfinies. Je voudrais également que les composants v2 puissent être gérés par cette application.
Or, dans les composants v2, et plus particulièrement la classe UIObject, il est en effet possible de déplacer un composant et de le redimensionner respectivement au moyen des méthode move() et setSize() ... Par contre, le seul moyen de récupérer ses dimensions ou sa position est d'utiliser les propriétés virtuelles x, y, width, height ... Aucune méthode getX(), getY(), getWidth() ou getHeight() n'est au rendez-vous.
Il m'est donc impossible de créer une interface dont je puisse me servir pour le typage du paramètre de ma méthode, étant donné que les propriétés virtuelles ne peuvent être renseignées dans une interface ... et donc d'utiliser ces propriétés dans ma méthode ! :x A moins d'utiliser des hacks pour déjouer les erreurs du compilateur, mais les interfaces servant uniquement au moment de la compilation, ca n'aurait aucun sens ! 8|
Voici le code de Macromedia :/**
Imaginez ensuite que le code ait été le suivant :
* width of object
* Read-Only: use setSize() to change.
* @helpid 3982
*/
function get width():Number
{
return _width;
}
/**
* height of object
* Read-Only: use setSize() to change.
* @helpid 3964
*/
function get height():Number
{
return _height;
}
/**
* x = left of object
* Read-Only: use move() to change.
* @helpid 3983
*/
function get x():Number
{
return _x;
}
/**
* y = top of object
* Read-Only: use move() to change.
* @helpid 3984
*/
function get y():Number
{
return _y;
}/**
* width of object
* Read-Only: use setSize() to change.
* @helpid 3982
*/
function getWidth():Number
{
return _width;
}
/**
* width of object
* Read-Only: use setSize() to change.
* @helpid 3982
*/
function get width():Number
{
return getWidth();
}
// etc ... pour les autres propriétés
J'aurais alors pu créer une interface listant les méthodes setWidth(), setHeight(), etc... et ainsi utiliser mes classes "home-made" ou des composants. Les interfaces n'ont vraisemblablement pas été une préoccupation principale de Macromedia. D'ailleurs, on n'en trouve aucune dans les classes fournies avec Flash ! :o
Commentaires
elles peuvent être utilisé à l'exécution pour tester le type avec un instanceof...
@++
Hello
je me suis rendu compte depuis qu'on en a parlé, qu'en fait c'était vraiment indispensable dans de nombreux cas... c'est clair que dans une utilisation plutot linéaire de la POO dans flash on peut avoir tendance à vouloir prendre des raccourcis en ne faisant que des propriétés virtuelles (c'est bon j'ai adopté ce nom maintenant ;)) sans faire de méthode intermédiaire... mais comme tu le dis, on ne peut pas interfacer celles ci.. de plus il est facile de créer des classes qui vont avoir à hériter d'une classe qui possèdera par défaut toutes sortes de propriétés virtuelles polymorphes mais n'ayant jamais le même code au niveau des méthodes Getter et des méthodes Setter... et si on s'attaque à des propriétés virtuelles directement.. et bien tout est très rapidement à refaire 
Tu dis NON ! Et tu as raison
Sinon c'est clair maintenant à force de m'y mettre sur un framework perso que les interfaces sont intéressantes à terme ! Je suis bien contant que l'on est ces discussions sur ton blog et celui de petpex.. cela me fait beaucoup progresser
UN GRAND MERCI !!
C'est quand même bête que l'on ne puisse pas renseigner les propriétés virtuelles dans les interfaces.
@++
Moi c'est surtout le fait qu'on ne puisse pas déclarer de variables dans les interfaces qui me dérange... :S
je suis d'accord là dessus
du moins en AS2 
ben il n'y a qu'en AS2 qu'on ne peut pas déclarer de variables dans les interfaces... lol
Fil des commentaires de ce billet