AS 3.0 y referencias entre clases
Hola a todos.
Resulta que me asalta una duda, que, en mi opinión, no es para nada trivial. Hasta ahora, siempre me han enseñado a interaccionar entre clases pasando las referencias a instancias de clase en el constructor de la nueva clase. Para muestra, un ejemplo:
Supongamos que tengo una clase A y una clase B. La clase A es la clase base de la película, y la clase B es instanciada desde la clase A. Por tanto, al instanciar la clase B le pasaría al constructor la instancia de la clase B, para poder interaccionar.
La duda que me surge es la siguiente, ¿es correcto?. Es decir, aunque suele funcionar bien, todos sabemos que cuando "más correcto" es el código, mejor y más facilmente se programa a la larga. Gracias de antemano.
Salu2
capisergio
Desconocía el término Singleton. Con respecto a los eventos, entendí mal tu respuesta. Todo claro ahora. Muchas gracias de nuevo.
Usuario desconocido
capisergio
Tengo una clase A, que controla toda la aplicación. Vamos, la clase madre de la aplicación.
Tengo entendido que, en este caso, esta clase debe ir instanciando el resto de clases. ¿Es correcto?
Sí
capisergio
Supongamos además, que esta clase A tiene una serie de propiedades específicas que se asignan dinámicamente en tiempo de ejecución, y por tanto, dependientes de su instancia.
Dicha clase A, instancia una clase B que realiza otro proceso distinto, pero que necesita acceder a algunos métodos de la clase A, incluyendo las propiedades de dicha instancia de A. Por tanto, para el ejemplo que propongo, tendría que acceder a la primera instancia de A, no siendo válido otra nueva instancia. ¿Cómo debería hacerlo? ¿es posible que esté planteando una aplicación con fallos en el diseño?
Supongo que solamente existe una instancia de tu clase A en toda tu aplicación. Podrías convertir esa clase en un Singleton y luego desde cualquier punto de la aplicación acceder a ella mediante:
A.getInstance( ).propiedad1 = 10;
A.getInstance( ).metodo1( );
Lo que te comentaba de comunicarse mediante eventos era algo así:
<code>
class A {
var b : B = new B( );
b.addEventListener( "click", clickHandler );
public function clickHandler( evento : Event ) : void
{...}
}
class B {
...
dispatchEvent( new Event( "click" ) );
...
}
</code>
De esta forma B no sabe de la existencia de A. Simplemente cuando pasa algo en B (el usuario hace click en el clip B, por ejemplo), éste dispara un evento para informar a los oyentes. En este caso el oyente es A, que ejecutará el método clickHandler cada vez que B dispare el evento "click".
un saludo
capisergio
Gracias por tu respuesta. De todas formas, me temo que no termino de entender la solución que propones, así que voy a explicarme un poco mejor, por si soy yo el que no plantea la pregunta correcta.
Tengo una clase A, que controla toda la aplicación. Vamos, la clase madre de la aplicación.
Tengo entendido que, en este caso, esta clase debe ir instanciando el resto de clases. ¿Es correcto?
Supongamos además, que esta clase A tiene una serie de propiedades específicas que se asignan dinámicamente en tiempo de ejecución, y por tanto, dependientes de su instancia.
Dicha clase A, instancia una clase B que realiza otro proceso distinto, pero que necesita acceder a algunos métodos de la clase A, incluyendo las propiedades de dicha instancia de A. Por tanto, para el ejemplo que propongo, tendría que acceder a la primera instancia de A, no siendo válido otra nueva instancia. ¿Cómo debería hacerlo? ¿es posible que esté planteando una aplicación con fallos en el diseño?
Siempre presuponiendo que no se va a escribir ninguna línea en el swf.
Soy consciente de mis grandes limitaciones en la POO, cosa que quisiera remediar, por lo que agradezco cualquier lectura que me podáis recomendar.
Gracias de nuevo.
Usuario desconocido
La mejor forma de hacer interactuar varias clases es mediante eventos, de esta forma evitas que una clase dependa de otra, logrando así una mayor encapsulación.
Una clase, cuanto menos sepa de las clases que le rodean, mejor.