Flash, el reconocido estándar para la creación de contenidos multimedia en la red, se está utilizando de manera progresiva para desarrollar aplicaciones basadas en Web. ActionScript 2.0 es una gran actualización al lenguaje de scripts o secuencias de comandos de Flash, que mejora de forma radical el desarrollo orientado a objetos mediante la formalización de la sintaxis y la metodología de la Programación orientada a objetos (OOP). Más allá del uso de esta tecnología, esta obra cubre en detalle aspectos como la tipificación estricta, la selección de tipos, clases, objetos, métodos o propiedades, o la gestión de excepciones, proporcionándole todas las instrucciones necesarias para diseñar y estructurar su código de forma adecuada. Con una orientación eminentemente práctica, ActionScript 2.0 resulta además el aliado perfecto para ajustar y crear la arquitectura de un proyecto orientado a objetos, así como para comprender cómo los componentes de interfaz y las subclases de clip de película encajan en una aplicación de Flash bien estructurada. Los desarrolladores de ActionScript descubrirán las diferencias en el desarrollo con las versiones 1.0 y 2.0, cómo actualizar el código heredado a ActionScript 2.0 y cómo obtener en definitiva el máximo partido de sus funciones esenciales y sus características OOP. Si es un desarrollador OOP con experiencia que viene de otro lenguaje como Java o C++, le mostrará además cómo adaptar su conocimiento a Flash.ÍndiceIntroducción Prólogo Este libro quiere que usted Qué no es este libro Quién debería (y no debería) leer este libro ActionScript 2.0 frente a ActionScript 1.0 Descifrar las versiones de Flash Archivos de ejemplo Parte I. El lenguaje ActionScript 2.0 Capítulo 1. Perspectiva general de ActionScript 2.0 Características de ActionScript 2.0 Nuevas características de Flash Player 7 Componentes de la versión 2 en Flash MX 2004 ActionScript 1.0 y 2.0 en Flash Player 6 y 7 Ajustar la versión de ActionScript y del reproductor de una película Cambios de ActionScript 1.0 en Flash Player 7 La sintaxis con barra inclinada de Flash 4 no es compatible con ActionScript 2.0 ¡Comencemos con la OOP! Capítulo 2. ActionScript orientado a objetos Programación de procedimiento y programación orientada a objetos Conceptos clave de la programación orientada a objetos Sintaxis de clases Creación de objetos Uso de objetos Encapsulación Tipos de datos Herencia Paquetes Compilación Comenzar una aplicación orientada a objetos ¿Cómo aplico OOP? Capítulo 3. Tipos de datos y comprobación de tipos ¿Por qué tipificación estática? Sintaxis de tipos Declaración de tipos de datos de variables y propiedades Declaración del tipo de datos del parámetro de un método y del valorde retorno ¿Por qué sintaxis posterior a los dos puntos? Tipos compatibles Manejar cualquier tipo de datos Compatibilidad con null y undefined Clases dinámicas incorporadas Burlar la comprobación de tipos Creación de parámetros que acepten tipos múltiples Permitir la creación de propiedades y métodos en las instancias de clase Evitar la comprobación de tipos en una base por usuario Seleccionar Terminología de selección Compatibilidad de selección en el tiempo de ejecución La selección no afecta a la selección de métodos o propiedades Selección frente a conversión Selección indulgente en el momento de la compilaciónde ActionScript 2.0 Problemas seleccionando a cadena, número, booleano, fecha y matriz Información de tipo de datos para clases incorporadas Fallos de comprobación de tipos de ActionScript 2.0 Las variables globales no pueden ser tipificadas Comprobación de tipos y código de la línea de tiempo Comprobación de tipos de instancias XML Ausencia de comprobación de tipos con el operador [ ] Elementos matriz y comprobación de tipos A continuación: Creación de clases (¡sus propios tipos de datos!) Capítulo 4. Clases Definición de clases Atributos de clase El atributo dynamic El atributo intrinsic Funciones del constructor (toma 1) Propiedades Atributos de propiedad Restricción del acceso a la propiedad con los atributos private y public Definir propiedades de clase con el atributo static Variables globales frente a propiedades de clase Subclases y propiedades de clase Expresiones constantes en el momento de la compilación Enumerar propiedades con bucles for-in Métodos Referencia al objeto actual con la palabra clave this Pasar el objeto actual a un método Administrar los conflictos de nombres parámetro/propiedad Uso redundante de la palabra clave this Atributos de método Controlar el acceso al método con los atributos public y private Definir métodos de clase con el atributo static Métodos accessor Variables locales Anidar funciones en métodos Acceder al objeto actual desde una función anidada en un método Métodos de obtención y de ajuste Simular propiedades de sólo lectura Argumentos extra o desaparecidos Funciones de constructor (Toma 2) Simular funciones de constructor múltiples Usar this en funciones de constructor Funciones de constructor frente a valores de propiedad por defecto Completar la clase Box Poner la teoría en práctica Capítulo 5. Autoría de una clase de ActionScript 2.0 Comienzo rápido de la autoría de clases Diseñar la clase ImageViewer De los requerimientos funcionales al código Implementación de ImageViewer (Toma 1) Utilizar ImageViewer en una película Precargar la clase ImageViewer Implementación de ImageViewer (toma 2) ImageViewer (toma 2), resumen del diseño Implementación de ImageViewer (toma 2) Utilizar ImageViewer (toma 2) Implementación de ImageViewer (Toma 3) Borrar los recursos de clase El código final de ImageViewer Volver a la clase Capítulo 6. Herencias Un manual sobre la herencia Método de clase y herencia de propiedad de clase Subclases como subtipos Un ejemplo OOP de Chat Preponderar métodos y propiedades Preponderar métodos de instancia Invocar un método de instancia preponderante Preponderar métodos de clase Preponderar propiedades La palabra clave super y el acceso a propiedades preponderadas Acceso a miembros desde métodos de instancia heredados, preponderados y preponderantes Acceso a miembros desde un método de instancia heredado Acceso a miembros desde un método de instancia preponderado Acceso a miembros desde un método preponderado invocado mediante super Acceso a miembros desde métodos de clase heredados y preponderados Buenas prácticas para preponderar Funciones de constructor en subclases Invocación superflua del constructor de la superclase en Flash Player 6 Convertir en subclases las clases incorporadas Clases incorporadas que almacenan librerías de funciones Aumentar las clases y los objetos incorporados La teoría de la herencia ¿Por qué herencia? Polimorfismo y vinculación dinámica Herencia frente a composición Es-una, tiene-una y usa-una Cuándo usar composición sobre herencia Utilizar la composición para librarse de un viejo hábito Incompatibilidad con clases abstractas y finales Probemos las herencias Capítulo 7. Autoría de una subclase de ActionScript 2.0 Extender las capacidades de ImageViewer El esqueleto de ImageViewerDeluxe Añadir los métodos setPosition( ) ysetSize( ) Cambiar automáticamente el tamaño de Image Viewer Utilizar ImageViewerDeluxe Seguir adelante sólo Capítulo 8. Interfaces El caso para interfaces Interfaces y clases con tipos de datos múltiples Sintaxis y uso de interfaces Convenciones de nombres de interfaces Herencia de interfaz Interfaces de indicador Herencias de tipos múltiples con interfaces A continuación, paquetes Capítulo 9. Paquetes Sintaxis de paquetes La instrucción import Importar un paquete completo Convenciones de nombre de paquete Definir paquetes Acceso a paquetes y a la ruta de la clase Añadir un nuevo directorio a la ruta de clases Simular paquetes en ActionScript 1.0 Sólo un poco más de teoría Capítulo 10. Excepciones El ciclo de gestión de excepciones Gestionar múltiples tipos de excepciones Determinar la granularidad del tipo de excepción Utilizar un único tipo de excepción personalizado Utilizar mensajes de depuración configurables Múltiples subclases BoxDimensionException personalizadas Borboteo de excepciones Excepciones no atrapadas El bloque finally Excepciones anidadas Un error de excepción anidada Control de los cambios de flujo en try/catch/actually Limitaciones de la gestión de excepciones en ActionScript 2.0 Excepciones no comprobadas Excepciones no incorporadas Temas de rendimiento de excepciones Del concepto al código Parte II. Desarrollo de aplicaciones Capítulo 11. Un esquema de una aplicación OOP La estructura básica de directorios El documento de Flash (archivo .fla) Las clases La línea de tiempo del documento La película de Flash exportada (archivo .swf) Proyectos en Flash MX Professional 2004 Veámoslo en acción Capítulo 12. Utilizar componentes con ActionScript 2.0 Perspectiva general de la aplicación de conversión de moneda Preparar el documento de Flash Añadir componentes al documento Iniciar la aplicación La clase CurrencyConverter Importar el paquete de componentes Propiedades de CurrencyConverter El método main( ) El constructor de clase Crear la interfaz de usuario El contenedor de la interfaz El componente de título Label El componente Label de instrucciones El componente de entrada TextInput El componente ComboBox currencyPicker El componente botón convertButton El componente de resultado TextArea Conversión de moneda basada en la entrada del usuario Exportar la aplicación final Gestionar eventos de componentes Capítulo 13. Subclases MovieClip La dualidad de las subclases de MovieClip Avatar: un ejemplo de una subclase de MovieClip El clip de película AvatarSymbol La clase Avatar Unir AvatarSymbol a la clase Avatar Crear instancias Avatar Inicializar instancias Avatar Avatar: la versión de composición Temas con activos anidados Propiedades y métodos de valores anidados inicialmente indefinidos Valores anidados no reconocidos automáticamente por el compilador Una nota sobre las subclases de MovieClip Más y más curioso Capítulo 14. Distribuir bibliotecas de clase Compartir archivos de fuente de clases Cargar clases en el tiempo de ejecución Crear las clases de la biblioteca de clases Crear el archivo .swf de la biblioteca de clase Crear la película que carga el archivo .swf de la biblioteca de clases Crear el archivo XML de exclusión Pruébela Compartir clases sin compartir archivos fuente Tiempo de ejecución frente a momento de compilación Crear una biblioteca de clases en el momento de la compilación sin fuentes Crear las clases de la biblioteca de clases Crear el icono del componente Crear la clase de componente Crear el componente Distribuir el componente a los desarrolladores Pruébelo Crear una biblioteca de clases en el tiempo de ejecución sin fuentes Resolver problemas OOP reales Parte III. Ejemplos de patrones de diseños en ActionScript 2.0 Capítulo 15. Introducción al diseño de patrones Haga salir a los patrones Capítulo 16. El patrón de diseño Observer Implementar Observer en ActionScript 2.0 Logger: un ejemplo Observer completo La clase LogMessage La clase OutputPanelView La clase TextFieldView La clase Logger ¿Mal uso de la herencia? Utilizar la clase Logger Temas de gestión de memoria con Observer Más allá de Observer Capítulo 17. El patrón de diseño Singleton Implementar Singleton en ActionScript 2.0 El patrón Singleton de la clase Logger Singleton frente a los métodos de clase y las propiedades de clase Una advertencia contra los Singleton como globales A las interfaces de usuario Capítulo 18. El patrón de diseño Model-View-Controller(Modelo-Vista-Controlador) La arquitectura general de MVC La comunicación en MVC Responsabilidades de clase en MVC Responsabilidades del modelo Responsabilidades de la vista Responsabilidades del controlador ¿Qué crean las clases MVC? Una implementación generalizada de MVC La implementación View La implementación del controlador Un reloj MVC La clase ClockModel La clase ClockUpdate Las clases ClockAnalogView y ClockDigitalView La clase ClockTools La clase ClockController Reunir todo: La clase Clock Exploración más lejana Capítulo 19. El modelo de delegación de eventos Estructura y participantes El evento fuente El objeto evento El oyente evento ¿Son equivalentes el modelo Observer y el modelo de delegaciónde eventos? El flujo de la lógica Implementación del núcleo La clase EventListenerList La clase EventObject La interfaz EventListener NightSky: Un ejemplo del modelo de delegación de eventos La fuente de eventos La subinterfaz EventListener La subclase EventObject La clase oyente de eventos La estructura global Randomizer, RandomizerListener, y RandomizerEvent Múltiples tipos de eventos desde una sola fuente de eventos La clase NightSky Utilizar NightSky en una aplicación Otras arquitecturas de eventos en ActionScript Desde un lugar a cualquier otro lugar Parte IV. Apéndices Apéndice A. Referencia rápida de lenguaje de ActionScript 2.0 Propiedades globales Funciones globales Clase Accessibility Constructor Métodos de clase Clase Arguments (Extiende matriz) Propiedades de instancia Clase Array Constructor Propiedades de clase Propiedades de instancia Métodos de instancia Clase Boolean Constructor Métodos de instancia Clase Button Constructor Propiedades de instancia Métodos de instancia Gestores de eventos Clase Camera Constructor Propiedades de clase Propiedades de instancia Métodos de clase Métodos de instancia Gestores de eventos Clase Color Constructor Métodos de instancia Clase ContextMenu Constructor Propiedades de instancia Métodos de instancia Gestores de eventos Clase ContextMenuItem Constructor Propiedades de instancia Métodos de instancia Gestores de eventos Clase Date Constructor Métodos de clase Métodos de instancia Clase Function Constructor Propiedades de instancia Métodos de instancia Clase Key Constructor Propiedades de clase Métodos de clase Eventos transmitidos a los oyentes Clase LoadVars Constructor Propiedades de instancia Métodos de instancia Gestores de eventos Clase LocalConnection Constructor Métodos de instancia Gestores de eventos Clase Math Constructor Propiedades de clase Métodos de clase Clase Microphone Constructor Propiedades de clase Propiedades de instancia Métodos de clase Métodos de instancia Gestores de eventos Clase Mouse Constructor Métodos de clase Eventos transmitidos a los oyentes Clase MovieClip Constructor Propiedades de instancia Métodos de instancia Gestores de eventos Clase MovieClipLoader Constructor Métodos de instancia Eventos transmitidos a oyentes Clase NetConnection Constructor Propiedades de instancia Métodos de instancia Gestores de eventos Clase NetStream Constructor Propiedades de instancia Métodos de instancia Gestores de eventos Clase Number Constructor Propiedades de clase Clase Object Constructor Propiedades de clase Propiedades de instancia Métodos de clase Métodos de instancia Clase PrintJob Constructor Propiedades de instancia Métodos de instancia Clase Selection Constructor Métodos de clase Transmisiones de eventos a los oyentes La clase SharedObject Constructor Propiedades de instancia Métodos de clase Métodos de instancia Gestores de eventos Clase Sound Constructor Propiedades de instancia Métodos de instancia Gestores de eventos Clase Stage Constructor Propiedades de clase Métodos de clase Eventos transmitidos a los oyentes Clase String Constructor Propiedades de instancia Métodos de clase Métodos de instancia Clase System Constructor Propiedades Métodos Clase System.capabilities Constructor Propiedades de clase Clase System.security Constructor Métodos de clase Clase TextField Constructor Propiedades de instancia Métodos de clase Métodos de instancia Gestores de eventos Eventos transmitidos a los oyentes Clase TextField.StyleSheet Constructor Métodos de instancia Gestores de eventos Clase TextFormat Constructor Propiedades de instancia Métodos de instancia Clase TextSnapshot Constructor Métodos de instancia Clase Video Constructor Propiedades de instancia Métodos de instancia Clase XML Constructor Propiedades de instancias Métodos de instancia Gestores de eventos Clase XMLNode Constructor Propiedades de instancias Métodos de instancia Clase XMLSocket Constructor Métodos de instancia Gestores de eventos Apéndice B. Diferencias con ECMAScript Edición 4 Índice alfabético