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 :/**
* 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;
        }
Imaginez ensuite que le code ait été le suivant :/**
* 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