Escribir buen código orientado a objetos en Adobe Flash

Estos son algunos consejos sobre cómo escribir un buen código orientado a objetos (OO) en Adobe Flash, especialmente para aquellos que siguen utilizando la versión MX de espera para ir a CS3.

Organizar las carpetas de las clases

En primer lugar, la organización de las clases hace que el trabajo mucho más fácil el mantenimiento del código. También puede crear una biblioteca real se puede reutilizar en otros proyectos. Flash utiliza una clasificación relacionada con el sistema de archivos, y luego organizarlos en carpetas también se verá reflejado en la importación de clases. Por ejemplo, si creamos la secuencia de las carpetas "MyLibrary / gráficos / parcela" e insertar nuestra propia clase de ActionScript "PlotClass.as", cuando deberíamos usar para importar la clase:

1
grafica . plot . PlotClass ; . importaciones MyLibrary gráficos trama PlotClass..;

Si la biblioteca (carpeta) "MyLibrary" no está en la carpeta de película o proyecto, utilice el flash la configuración de publicación para seleccionar la ruta:

Establecer percoroso bibliotecas


Encapsular el código: el uso de las propiedades

La prisa es siempre "mal consejero", por lo que debería pasar más tiempo con el fin de recoger los frutos de nuestros esfuerzos más tarde. En el desarrollo de una clase en ActionScript tiende a "mostrar" a todos los nuestros, incluso los que se utilizan actualmente sólo internamente a la clase.

1
2
3
4
class MiClase {
Number = 10 ; mio_valore var: Número = 10;
MyClass function () {}
}

Todo esto es malo porque hace que nuestro código de valores extremos inestables y propensas a errores, incluso si hemos de usar los objetos en cuestión. La norma permite dell'incapsulmento en vez de controlar las propiedades de configuración de una clase muy rendondola más estable.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class MiClase {
__mio_valore : Number = 10 ; var __mio_valore privado: Número = 10;
MyClass function () {}
get MioValore ( ) : Number { Función pública MioValore get (): Número {
__mio_valore ) ; retorno (__mio_valore);
}
set MioValore ( v : Number ) { MioValore conjunto de la función pública (v: Número ) {
/ / Pssst: usando el operador ternario ... ;)
/ / __mio_valore = (V> 5 & & v <20) V: __mio_valore;
v > 5 && v < 20 ) { if (v> 5 & & v <20) {
__mio_valore = v;
}
}
}

in modo tale che possa assumere solo i valori compresi tra 5 e 20. En este ejemplo la propiedad MioValore , como se ve desde el exterior, es controlada por el function set de modo que sólo puede tomar valores entre 5 y 20. se preferite. Esto significa que dentro de nuestra clase nos referiremos sólo a __mio_valore o this.__mio_valore si lo prefiere. Sin embargo, siempre se asegurará de que la "variable" __mio_valore será de entre 5 y 20, a menos que nosotros mismos somos, dentro de la clase, cambie el valor de forma incorrecta.
, permette di creare proprietà in sola lettura, in sola scrittura o entrambe, il chè non è da poco. Además, el uso de la propiedad, o la function get y set , se puede crear propiedad de sólo lectura, sólo escritura o ambos, que es el segundo a corto plazo.

Su uso privado y público cuando lo necesite

Los métodos utilizados sólo internamente a la clase no debe ser expuesto fuera. En primer lugar porque no lo necesita! En segundo lugar, porque en realidad no forma parte del objeto de la interfaz. Al lanzar una versión de una clase de forma implícita, certifica que los métodos y propiedades que la clase expone (la interfaz) se mantendrá en las futuras versiones del objeto. Obviamente que puede cambiar es su aplicación, ovvvero el código, pero no el nombre o los parámetros de nuestro método o una propiedad. Utilizando los métodos private , sin embargo, estos sólo serán visibles desde el interior del objeto. Podríamos usar y, si es necesario, modificar la totalidad, sin violar la regla fundamental de la programación orientada a objetos.

Heredar

La herencia (herencia), que es la característica de un objeto que desciende de uno al otro y luego "heredan" todas las características del objeto "madre", es una herramienta única de la programación orientada a objetos. La construcción de las jerarquías, sin embargo, requiere de mucha experiencia, a fin de no crear subconjuntos innecesarias código que hacen un gran elefante pronto inmanejable. A menudo, las clases se crean la placa base (IUnknown) después de un largo análisis o después de haber notado algunas "redundancia" en la creación de clases.
Pero el hecho es que para usarlo con precaución, puede extenderse en pocos segundos, todos los objetos de una clase filgi. ActionScript utiliza la palabra clave extends a la creación de la herencia entre una clase y otra.

1
2
3
4
5
6
7
8
9
10
11
12
ClasseMadre.as / / Archivo
{Clase ClasseMadre
ClasseMadre función () {}
Addiziona ( a : Number , b : Numer ) : Number { Añade la función pública (a: Número , b: Number): Número {
a + b ) ; return (a + b);
}
}
Figlio.as / / Archivo
ClasseMadre importaciones;
ClasseMadre { {Hijo de clase se extiende ClasseMadre
Hijo función () {}
}

, ereditato appunto dalla classe madre ClasseMadre . En este ejemplo la clase Figlio del método de forma automática Addiziona() , de hecho, heredados de la clase padre ClasseMadre . Especialmente útil es la posibilidad de referirse siempre a la clase padre con la palabra clave super , a fin de que los métodos heredados y sobrescribir propiedades.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ClasseMadre.as / / Archivo
{Clase ClasseMadre
ClasseMadre función () {}
Addiziona ( a : Number , b : Numer ) : Number { Añade la función pública (a: Número , b: Number): Número {
a + b ) ; return (a + b);
}
}
Figlio.as / / Archivo
ClasseMadre importaciones;
ClasseMadre { {Hijo de clase se extiende ClasseMadre
Hijo función () {}
Addiziona ( a : Number , b : Numer , c : Number ) : Number { Añade la función pública (a: Número , b: Number, c: Número ): Número {
super . Addiziona ( a , b ) + c ) ; retorno (super. Agrega (a, b) + c);
}
}

Esto, en mi opinión, es una de las muchas bellezas de la creación de objetos!

Soluciones

Si la clase que está escribiendo está vinculada a un clip de película, con eficacia las convierte en una extensión, requiere que cualquier objeto ActionScript (MovieClip o TextField) que figura en el padre MovieClip, se hace referencia al principio de la clase. Por ejemplo, si se amplía un clip de película que contiene un MovieClip secondo_mc segundo identificado por su nombre, al declarar la clase debe incluir una referencia a este MovieClip de esta manera simple:

1
2
3
4
5
6
7
8
9
MovieClip { clase MyClass se extiende MovieClip {
secondo_mc : MovieClip ; privado secondo_mc var: MovieClip ;
MyClass function () {}
/ /
Refresh ( ) { public function actualizar () {
/ / ActionScript fracasaría si no se había declarado esta variable / puntero al comienzo
secondo_mc . _x = 10 ; este secondo_mc _x = 10..;
}
}

Cuando los objetos que se manipulan se sabe que no hay problema. Sin embargo, es posible que desee crear un entorno de ejecución MovieClip y por tanto no espera que ninguna línea de la declaración original. Por ejemplo, este código no funciona:

1
2
3
4
5
6
7
8
9
MovieClip { clase MyClass se extiende MovieClip {
MyClass function () {}
/ /
CreaMovie ( ) { CreaMovie public function () {
, 100 ) ; createEmptyMovieClip ("secondo_mc", 100);
/ / ActionScript no conoce este objeto
secondo_mc . _x = 10 ; este secondo_mc _x = 10..;
}
}

Este es un caso muy común, imagine el siguiente código:

1
2
3
4
5
6
7
8
9
MovieClip { clase MyClass se extiende MovieClip {
MyClass function () {}
/ /
CreaMovie ( ) { CreaMovie public function () {
var i = 0 ; i < 50 ; i ++ ) { for (var i = 0; i <50; i + +) {
+ i , i ) ; createEmptyMovieClip ("item" + i, i);
}
}
}

En este caso, como en otros, es posible acceder a un objeto como un índice de una matriz, es decir:

1
2
3
4
5
6
7
8
9
10
MovieClip { clase MyClass se extiende MovieClip {
MyClass function () {}
/ /
CreaMovie ( ) { CreaMovie public function () {
var i = 0 ; i < 50 ; i ++ ) { for (var i = 0; i <50; i + +) {
+ i , i ) ; createEmptyMovieClip ("item" + i, i);
"item" + i ] . _x = 10 ; esto ["item" + i] _x = 10.;
}
}
}

Esta es una técnica muy útil en muchas circunstancias.

Control de versiones

Una última cosa útil que yo sugiero es el control de versiones, que está seguro de mantener un registro de cambios. Cuando se trata de una serie de estas clases tienden a evolucionar con el tiempo. Buena regla general es, por tanto, adoptar un programa (CCSC [del código fuente del sistema de control], CVS, Subversion para Mac OS / Linux / Unix o FileHamster en Windows) se pueden mantener las versiones de los archivos de las distintas versiones que emitimos.
Además de comentar el código y las versiones / revisiones de la Junta de establecer una variable dentro de la clase (al estilo JavaScript) con el fin de hacer "hablar" el código de un mismo objeto:

1
2
3
4
class MiClase {
__release : String = "1.0" ; var __release privado: Cadena = "1.0";
MyClass function () {}
}

Inclusiones y constante

Puede incluir el código directamente en el aula. Beneficios a nivel de organización, escriba:

1
2
3
MovieClip { clase MyClass se extiende MovieClip {
# Include "ClassVersion.as"
}

Si falta el #define (! realmente una vergüenza que no son compatibles) de C, que aquí hay una solución bastante decororsa:

1
2
3
4
5
6
7
8
ERROR_1 : String = "Errore tipo 1" ; var public static ERROR_1: cadena = "Error tipo 1";
/ / O - código de Adobe
/ / Los valores para los tipos de comandos para _cmdQueue
Number = 0 ; JUGAR var estática: Número = 0;
Number = 1 ; CARGA var estática: Número = 1;
Number = 2 ; PAUSA var estática: Número = 2;
Number = 3 ; PARADA var estática: Número = 3;
Number = 4 ; BUSCAR var estática: Número = 4;

One Response to "escribir buen código orientado a objetos en Adobe Flash"

  1. 03 de septiembre 2008 ActionScript 3.0 para principiantes: lección # 2 | Undolog.com :

    [...] Las propiedades públicas, mediante el encapsulado de su programación orientado a objetos (ver escribir buen código orientado a objetos en Adobe Flash). __player __stop y denotan que el jugador activo y el estado de [...]

Deja un comentario

XHTML PERMISO TAG: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> código de inserción:
 <pre></pre> // blocco generico <code></code> // blocco generico [cc_actionscript][/cc_actionscript] // Actionscript [cc_actionscript3][/cc_actionscript3] // Actionscript 3 [cc_css][/cc_css] // CSS Style Sheet [cc_html][/cc_html] // HTML [cc_js][/cc_js] // Javascript [cc_objc][/cc_objc] // Objective-C [cc_php][/cc_objc] // PHP [cc_sql][/cc_sql] // SQL