Fundamentos de AS3: Destripando la clase documento y su constructor. El punto de entrada a un programa

Volver al Índice

Vamos a explicar en detalla lo que hace cada línea de código del ejemplo:

package  
{
	import flash.display.MovieClip;
	
	public class Main extends MovieClip 
	{
		public function Main() 
		{
			var miPelota:Pelota = new Pelota();
			addChild(miPelota);
			miPelota.x = 100;
			miPelota.y = 175;
		}
	}
}
Línea 1:
Todas las clases deben tener una sentencia package. En nuestro caso estamos utilizando el paquete por defecto, por eso no escribimos nada detrás de esta palabra clave.
Si escribiéramos una ruta detrás (con notación punto) estaríamos indicando en que carpeta se encuentra el archivo .as de esta clase, con respecto a la carpeta raíz del proyecto.
Aunque utilizar paquetes es una forma muy eficiente de organizar las diferentes clases de un proyecto real, la mayoría de nuestros ejemplos van a tener todas las clases en la carpeta raíz del proyecto, así que no pondremos ninguna ruta aquí.
Línea 2:
Los paquetes definen un bloque de código (todo lo que esté dentro de este bloque pertenece a dicho paquete).
Siempre que definamos un bloque de código, debemos rodearlo de llaves: { para abrir el bloque y } para cerrarlo. Es muy importante que cada apertura de llave tenga su correspondiente cierre de llave y viceversa. De lo contrario se provocará un error, con el agravante de que el compilador no es capaz de decirnos con exactitud en qué línea o por qué se ha producido este.
Recuerda tabular tu código para que cada apertura de llave esté enfrentada verticalmente con su cierre, para poder detectar más fácilmente este tipo de errores.
Fíjate en que el bloque de código del paquete se cierra en la línea 15 con una llave de cierre. Si tabulas bien el código esto es fácil de ver.
Línea 3:
Esto es una sentencia import. ActionScript (igual que cualquier lenguaje de programación) define infinidad de clases que están listas para ser usadas. Esto facilita mucho las tareas de programación, porque si ya existe una clase con la funcionalidad que necesitamos no es necesario escribirla.
Pero no tiene sentido que todas esas definiciones se incluyan en un programa si no se usan en él dichas clases. Por eso las clases definidas por el lenguaje (excepto unas pocas con funcionalidades básicas) no se incluyen en los programas a no ser que se importen.

En este caso, estamos utilizando la clase MovieClip para extender la funcionalidad de nuestra clase documento (línea 5), así que tenemos que importarla.

No es necesario recordar la ruta completa que aparece detrás de la palabra clave import. En el entorno de Flash si, después de escribir el nombre de una clase correctamente, pulsamos Ctrl + Enter (o Cmd + Enter en Mac) el Flash añade automáticamente la sentencia import necesaria en su sitio.

Las sentencias import en AS3 van siempre dentro del bloque de definición del paquete, antes de la sentencia de definición de la clase.

Línea 5:
Aquí comienza la clase Main con su sentencia de definición de clase. En ella, y por orden, se especifica un atributo de acceso (public, más adelante veremos qué significa esto), la palabra clave class, seguida del nombre de la clase y de, opcionalmente, la palabra clave extends seguida de otro nombre de clase.

Extender una clase sirve para incluir todos sus propiedades y métodos en la nuestra. La clase documento de AS3 siempre extiende MovieClip que es el equivalente en programación de los símbolos con tipo del mismo nombre (Clip de Película en español)

Esto garantiza que podamos añadir elementos gráficos a la pantalla, programar animaciones, escuchar eventos, etc. desde la clase documento gracias a los métodos definidos en MovieClip

Línea 6:
Las clases definen también un bloque de código, así que debemos comenzar dicho bloque con una apertura de llave. Su pareja de cierre se encuentra en la línea 14, en este caso.
Línea 7:
Aquí comienza el método constructor con su sentencia de definición. De nuevo, la primera palabra que aparece es un modificador de acceso, public.

Le sigue la palabra clave function, que nos dice que lo que estamos definiendo es una función. Los métodos son funciones, el constructor es un método.

A continuación se escribe el nombre del método, Main, que es el mismo que el de la clase. La forma de identificar que un método es el constructor de la clase es pornerle precisamente el mismo nombre que a la clase.

Fíjate en que el nombre del método va seguido de paréntesis, en este caso vacíos. Estos paréntesis sirven para definir dentro los parámetros que puede recibir un método (hablaremos de esto más adelante). En este caso no hay parámetros definidos, pero los paréntesis hay que ponerlos siempre.

Línea 8:
Los métodos definen también un bloque de código, así que abrimos llave. Este bloque termina con el cierre de llave de la línea 13.
Líneas 9 a 12:
En estas líneas tenemos las sentencias que contiene el bloque de código del constructor. Se ejecutan al llamarlo (también se dice invocarlo) una detrás de otra en el orden en que se han escrito.

Fíjate en que cada una de estas sentencias acaba con punto y coma (;). Toda sentencia de AS3 que no defina un bloque de código debe acabar con ;.
No lo olvides porque este es otro de los motivos por los que pueden aparecer errores que después son difíciles de localizar.

Línea 9:
Esta es una sentencia de asignación. Se reconocen porque tienen dos partes separadas por un =.
En AS3 el = no tiene el mismo significado que en matemáticas. Es un operador que asigna el resultado de la expresión que está a su derecha a la variable que se encuentra a su izquierda.

En este caso, además de usar la variable miPelota a la izquierda de este operador, la estamos definiendo. Cuando definimos una variable escribimos la palabra clave var seguida de el nombre de la variable, aquí miPelota. Después se pone : (no confundir con ;) y el tipo de dato que puede referenciar dicha variable, en este caso Pelota, que es la clase que hemos definido a partir del símbolo de la biblioteca al exportarlo para AS3.

A la derecha del = estamos creando una instancia de Pelota al invocar a su constructor. Para invocar el constructor de una clase usamos la palabra clave new seguida del nombre del constructor de la clase y de una pareja de paréntesis.

Resumiendo, esta sentencia se podría leer así: Crea un nuevo objeto a partir de pelota y asígnaselo a la variable que estoy definiendo como miPelota, para que más tarde me pueda referir a él con ese nombre.

Cabe aclarar que esta sentencia es una especia de abreviatura de estas dos:

						var miPelota:Pelota;
						miPelota = new Pelota();
			

Que quizás se entienda mejor. Pero es muy habitual definir y asignar una variable en la misma línea, por eso no lo he escrito de esta última forma.

Línea 10:
Aquí estamos llamando a un método que ya está definido. Aunque no lo veas en la clase documento, el método addChild() está definido dentro de ella. Es uno de los métodos que se heredan de MovieClip por haber puesto en la sentencia de definición de la clase extends MovieClip (línea 5).

El método addChild() sirve para añadir cualquier objeto gráfico a la pantalla. Necesita un parámetro para funcionar: el objeto que ha de añadir a la pantalla, y así está definido en la clase MovieClip, aunque no podamos verlo. Por eso tenemos que pasarle el objeto que queremos añadir a la pantalla entre los paréntesis.

Esta línea podría traducirse como: Añade el objeto asignado a la variable miPelota a la pantalla.

Líneas 11 y 12
Aquí tenemos de nuevo dos sentencias de asignación (lo sabes porque ambas tienen un =.

Las variables a las que estamos asignando los valores 100 y 175, son propiedades del objeto asignado a miPelota
Las propiedades son como variables, pero pertenecen al objeto en el que están definidas.
Por eso, cuando no queremos acceder a ellas desde fuera del objeto, necesitamos primero acceder al objeto al que pertenecen. Por eso nos hacía falta definir una variable que apuntara al objeto que hemos creado con new Pelota().

Para acceder a una propiedad o método de un objeto fuera del actual usamos lo que se denomina notación punto. Escribimos el nombre de la variable que nos da acceso al objeto, seguida de un punto . y después el nombre de la propiedad que queremos modificar o de la que queremos conocer su valor.

En este caso estamos modificando las propiedades x e y usando el operador de asignación (=).

¡Al final la explicación ha sido mucho más larga que el código! Sí, es verdad, pero sólo porque estamos empezando desde cero. Una vez que tengas an la cabeza los conceptos básicos, que no son muchos más de los que hemos esbozado aquí, no harán falta tantas explicaciones, ni parecerán tan abrumadoramente complejas.

Para terminar te voy a explicar un truco para hacerte el aprendizaje más llevadero. Déjame mostrártelo en la página siguiente.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *