Introduction à ActionScript 3.0

A propos d’ActionScript

ActionScript est le langage de programmation des environnements d’exécution d’Adobe® Flash® Player et Adobe® AIR™. Il assure l’interactivité, le traitement des données et bien d’autres fonctions pour le contenu Flash, Flex et AIR et les applications associées.

ActionScript s’exécute dans la machine virtuelle ActionScript (AVM), un composant de Flash Player et AIR. Le code ActionScript est généralement compilé en pseudo-code (sorte de langage de programmation écrit et compris par les ordinateurs) par un compilateur, tel celui intégré à Adobe® Flash® Professional ou celui intégré à Adobe® Flash® Builder™ et fourni dans le kit de développement SDK d’Adobe® Flex™. Le pseudo-code est intégré aux fichiers SWF, qui sont exécutés par Flash Player et AIR.

ActionScript 3.0 constitue un modèle de programmation solide, bien connu des développeurs possédant des connaissances élémentaires sur la programmation orientée objets. Parmi les principales fonctionnalités d’ActionScript 3.0 qui ont été améliorées par rapport aux versions antérieures d’ActionScript figurent :

  • Une nouvelle machine virtuelle ActionScript, appelée AVM2, qui exploite un nouveau jeu d’instructions de pseudo-code binaire et améliore grandement les performances.

  • Un code de compilateur plus moderne qui effectue des optimisations de plus bas niveau que les versions antérieures du compilateur.

  • Une interface de programmation (API) étendue et améliorée, avec contrôle de bas niveau des objets et un véritable modèle orienté objet.

  • Une API XML reposant sur la spécification ECMAScript pour XML (E4X) (ECMA-357 niveau 2). E4X est une extension de langage d’ECMAScript qui ajoute XML comme type de données natif.

  • Un modèle d’événements fondé sur la spécification d’événements du modèle d’objet de document (DOM, Document Object Model) niveau 3.

Avantages d’ActionScript 3.0

Les possibilités d’ActionScript 3.0 dépassent largement les fonctions de programmation des versions précédentes. Cette version est conçue pour faciliter la création d’applications très complexes impliquant d’importants jeux de données et des bases de code orientées objet et réutilisables. Si ActionScript 3.0 n’est pas indispensable à l’exécution de contenu dans Adobe Flash Player, il ouvre néanmoins la voie à des améliorations de performance uniquement disponibles dans AVM2 (la machine virtuelle d’ActionScript 3.0). Le code d’ActionScript 3.0 peut s’exécuter jusqu’à dix fois plus vite que le code des versions antérieures d’ActionScript.

L’ancienne version de la machine virtuelle, AVM1, exécute le code ActionScript 1.0 et ActionScript 2.0. Elle est prise en charge par Flash Player 9 et 10 pour assurer la compatibilité ascendante avec le contenu existant.

Nouveautés d’ActionScript 3.0

Bien que de nombreuses classes et fonctions d’ActionScript 3.0 s’apparentent à celles d’ActionScript 1.0 et 2.0, son architecture et sa conceptualisation diffèrent des versions précédentes. Parmi les améliorations d’ActionScript 3.0, on compte de nouvelles fonctions du langage de base et une API avancée, qui accroît le contrôle des objets de bas niveau.

Fonctions du langage de base

Le langage de base définit les éléments de construction fondamentaux du langage de programmation, par exemple les arguments, expressions, conditions, boucles et types. ActionScript  3.0 contient de nombreuses fonctions qui accélèrent le processus de développement.

Exceptions d’exécution

ActionScript 3.0 peut signaler davantage de conditions d’erreur que les versions précédentes. Utilisées pour les conditions d’erreur courantes, les exceptions d’exécution améliorent la procédure de débogage et vous permettent de développer des applications susceptibles de gérer les erreurs de manière fiable. Les erreurs d’exécution peuvent fournir des traces de pile qui identifient le fichier source et le numéro de ligne, pour un repérage plus rapide des erreurs.

Types d’exécution

Dans ActionScript 3.0, les informations de type sont préservées lors de l’exécution. Elles permettent de vérifier les types lors de l’exécution, optimisant ainsi l’intégrité des types du système. Les informations de type servent également à représenter les variables dans les représentations machine natives, ce qui accroît les performances et réduit l’utilisation de la mémoire. Dans ActionScript 2.0, les annotations de type visent avant tout à aider le développeur ; lors de l’exécution, toutes les valeurs sont typées dynamiquement.

Classes scellées

ActionScript 3.0 introduit le concept de classe scellée. Une telle classe possède uniquement un jeu fixe de propriétés et de méthodes, définies lors de la compilation. Il est impossible d’en ajouter d’autres. Ainsi, la vérification effectuée au moment de la compilation est plus stricte et garantit une plus grande robustesse des programmes. L’utilisation de la mémoire est également optimisée puisqu’une table de hachage interne n’est pas requise pour chaque occurrence d’objet. Les classes dynamiques sont également disponibles par le biais du mot-clé dynamic. Bien que scellées par défaut, toutes les classes d’ActionScript 3.0 peuvent être déclarées dynamiques grâce au mot-clé dynamic.

Fermetures de méthodes

ActionScript 3.0 permet l’utilisation d’une fermeture de méthode qui se rappelle automatiquement l’occurrence de son objet d’origine. Cette fonction s’avère utile dans le traitement des événements. Dans ActionScript 2.0, les fermetures de méthode ne gardent pas la trace de l’occurrence d’objet à partir de laquelle elles ont été extraites, d’où un comportement inattendu lors de l’appel de la fermeture de méthode.

ECMAScript pour XML (E4X)

ActionScript 3.0 intègre ECMAScript pour XML (E4X), récemment normalisé sous le nom ECMA-357. E4X offre un jeu d’éléments de langage naturels et courants qui permettent de manipuler XML. Contrairement aux API classiques d’analyse XML, XML et E4X fonctionnent comme un type de données natif du langage. E4X simplifie le développement d’applications exploitant XML grâce à une réduction drastique du volume de code requis.

Pour visualiser la spécification E4X d’ECMA, aller à www.ecma-international.org (disponible en anglais uniquement).

Expressions régulières

ActionScript 3.0 inclut une prise en charge native des expressions régulières afin d’accélérer la recherche et la manipulation des chaînes. Dans ActionScript 3.0, cette prise en charge suit la version 3 de la spécification de langage ECMAScript (ECMA-262).

Espaces de noms

Les espaces de noms sont semblables aux spécificateurs d’accès classiques qui assurent le contrôle de visibilité des déclarations (public, private, protected). Ils fonctionnent comme des spécificateurs d’accès personnalisés, qui portent le nom de votre choix. Les espaces de noms sont dotés d’un identifiant de ressource universel (URI, Universal Resource Identifier) afin d’éviter les collisions. Ils servent également à représenter les espaces de noms XML en cas d’utilisation d’E4X.

Nouveaux types de primitives

ActionScript 3.0 comprend trois types numériques : Number, int et uint. Number représente un nombre en virgule flottante à deux décimales. Le type int est un entier signé 32 bits qui permet au code ActionScript de profiter de la rapidité de traitement mathématique de l’unité centrale. Il s’avère pratique pour les compteurs de boucles et les variables utilisant des entiers. Le type uint est un type d’entier non signé 32 bits, utile pour les valeurs de couleurs RVB, les compteurs d’octets, etc. ActionScript 2.0, en revanche, utilise un seul type numérique, Number.

Fonctions API

Les API d’ActionScript 3.0 contiennent un grand nombre de classes qui vous permettent de contrôler les objets de bas niveau. L’architecture du langage est conçue pour être plus intuitive que les versions antérieures. Ces nouvelles classes étant trop nombreuses pour autoriser une présentation détaillée à ce stade, il est utile de mettre en avant quelques changements significatifs.

Modèle d’événements DOM3

Le modèle d’événements Document Object Model de niveau 3 (DOM3) offre une méthode standard de génération et de traitement des messages d’événement. Il permet aux objets composant les applications d’interagir et de communiquer tout en conservant leur état et en réagissant aux changements. Etabli à partir des spécifications d’événements DOM niveau 3 du World Wide Web Consortium, ce modèle fournit un mécanisme plus clair et plus efficace que les systèmes d’événements disponibles dans les versions antérieures d’ActionScript.

Les événements et événements d’erreur se trouvent dans le package flash.events. Les composants Flash Professional et la structure Flex utilisant le même modèle d’événements, le système d’événements est unifié sur l’ensemble de la plate-forme Flash.

API de liste d’affichage

L’API d’accès à la liste d’affichage, c’est-à-dire l’arborescence contenant tous les éléments visuels de l’application, est constituée de classes permettant de manipuler les primitives visuelles.

La classe Sprite est un élément de construction léger, adaptée à la classe de base des éléments visuels tels que les composants d’interface. La classe Shape représente des formes vectorielles brutes. Il est possible d’instancier ces classes naturellement à l’aide de l’opérateur new, mais aussi de les redéfinir dynamiquement comme parent à tout moment.

La gestion de profondeur est automatique. Des méthodes permettent de spécifier et de gérer l’ordre de superposition des objets.

Gestion des données et contenus dynamiques

ActionScript 3.0 comprend des mécanismes de chargement et de gestion des actifs et des données au sein de l’application qui se caractérisent par leur intuitivité et leur cohérence dans l’ensemble de l’API. La classe Loader propose un unique mécanisme de chargement des fichiers SWF et des actifs d’image, et permet d’accéder à des informations détaillées sur le contenu chargé. La classe URLLoader offre un mécanisme distinct de chargement du texte et des données binaires dans les applications orientées données. La classe Socket permet la lecture et l’écriture des données binaires dans les sockets de serveur, quel que soit le format.

Accès aux données de bas niveau

Diverses API permettent d’accéder à des données de bas niveau. Pour le téléchargement de données, la classe URLStream donne accès aux données sous forme binaire brute pendant le téléchargement. Avec la classe ByteArray, vous pouvez optimiser la lecture, l’écriture et la manipulation des données binaires. L’API Sound assure le contrôle précis du son par le biais des classes SoundChannel et SoundMixer. Des API liées à la sécurité fournissent des informations sur les droits de sécurité d’un fichier SWF ou du contenu chargé, pour une gestion plus efficace des erreurs de sécurité.

Utilisation de texte

ActionScript 3.0 contient un package flash.text destiné à l’ensemble des API relatives au texte. La classe TextLineMetrics propose des mesures détaillées relatives à une ligne de texte au sein d’un champ de texte. Elle remplace la méthode TextFormat.getTextExtent() d’ActionScript 2.0. La classe TextField contient diverses méthodes de bas niveau, qui fournissent des informations déterminées sur une ligne de texte ou un caractère unique dans un champ de texte. Par exemple, la méthode getCharBoundaries() renvoie un rectangle représentant le cadre de sélection d’un caractère. La méthode getCharIndexAtPoint() renvoie l’index d’un caractère à un point donné. La méthode getFirstCharInParagraph() renvoie l’index du premier caractère d’un paragraphe. Les méthodes de niveau de ligne incluent getLineLength(), qui renvoie le nombre de caractères d’une ligne de texte donnée, et getLineText(), qui renvoie le texte de la ligne spécifiée. La classe Font permet de gérer les polices intégrées à des fichiers SWF.

Les classes du package flash.text.engine, qui constituent Flash Text Engine, sont conçues pour un contrôle de bas niveau du texte et permettent de créer des structures et des composants texte.