Ostia tio... pedazo....

Yo s� que se me ha quedado peque�o, pero no tengo conocimientos ni base
ninguna para saltar

Deja que lo asimile y te invito a las ca�as el 5DMS del 18DMS, despu�s te
pregunto, pero antes de la 5 botella...

Y ya puestos en OOP, de lo que no tengo ni idea, �alg�n sitio en castellano
para ir asimilando?, porque cuando Dragan intenta explicarme que un "perro"
es una clase, que el "color canelo" es una propiedad, que "ladrar" es un
m�todo y que "patada en las costillas" es un evento que dispara el m�todo,
me da por pensar en lo tranquilo que trabajaba yo de mensajero.

Gracias a los dos, a ver si en la siguiente pregunta puedo plantear dudas
sobre OOP

----- Original Message -----
From: "Joseba Alonso" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, September 05, 2003 7:23 PM
Subject: Re: [ASNativos] aplicar acciones dinamicamente, algunas
conclusiones


> Felipe,
>
> Necesitas urgentemente aplicar OOP. Visto tu codigo ,la programacion
> procedural se te esta comenzando a quedar peque�a...
>
> Primero, planteamiento.
>
> Tu quieres poder generar botones dinamicamente, necesitas una clase. Luego
> necesitas que esos botones tengan una serie de caracteristicas (seran las
> propiedades) y que hagan una serie de acciones (metodos). A parte
necesitas
> saber cuando ha ocurrido una determinada accion para poder reaccionar a
ella
> (eventos).
>
> Una de las normas mas b�sicas del OOP es intentar no meter "hardcoded
> values". Esto es, ningun literal en tu codigo. Por ejemplo:
>
> var colorBorder = "0x990000";
>
> Esto te obliga a modificar el codigo cada vez que quieras hacerlo de otro
> color. Y te pone en un aprieto muy grave si necesitas bordes de colores
> diferentes. A esto se le llama codigo portable. Tu ya has hecho una
> aproximacion a este concepto, no es algo te tengan que decir, viene de la
> experiencia y tu sabes que poniendo los valores de la variables del codigo
> al principio de la funcion luego te resultar� mas comodo cambiarlas. Pero
> con OOP se va mas all�.
>
> Otra cosa es tener bien claro como quieres que sea esa clase. O sea que
> funcionalidad le quieres dar. Las enumero segun tu codigo:
>
> -- Propiedades (caracteristicas):
>
> Width
> Height
> colorBorder
> colorBorderOver
> colorBackground
> colorBackgroundOver
> fontSize
> fontType
> fontColor
> fontColorOver
> fieldAlign
> x
> y
> texto
>
> -- Metodos (funciones)
>
> Dibujar()
>     Este metodo existe para antes de que se dibuje puedas modificar sus
> caracteristicas.
> Eliminar()
>
> -- Eventos
>
> onClick
>
> Ok, con todo esto en un papel vamos a definir la clase segun las
> caracteristicas que tu has marcado:
>
> Primero vamos con el contructor de la clase, en el contructor hay que
> inicializar el objeto, por tanto se deberian de declarar todas las
> propiedades y, si quieres, asignarles un valor por defecto, pero con la
> posibilidad de que luego se pueda modificar. Tambien hay que tener en
cuenta
> que los parametros que deberia de recoger un constructor son los minimos
> para que tu clase funcione. En este caso voy a tomar algunos de los de tu
> funcion original:
>
> <code>
>
> // Contructor de clase
>
> _global.Boton = function(texto,x,y){
>     // Declaracion de propiedades, valores por defecto
>     this.width = 150;
>     this.height = 18;
>     this.colorBorder = "0x990000";
>     this.colorBorderOver = "0x990000";
>     this.colorBackground = "0xCCCCCC";
>     this.colorBackgroundOver = "0xFFFFFF";
>     this.fontSize = 10;
>     this.fontType = "Verdana";
>     this.fontColor= "0x000000";
>     this.fontColorOver= "0xFFFFFF";
>     this.fieldAlign = "center"
>     // Guardar los parametros del contructor
>     this.x = x;
>     this.y = y;
>     this.texto = texto;
>     // Esta propiedad la he a�adido para guardar una referencia al
movieclip
> del boton
>     this.clip = null;
> }
>
> </code>
>
> Bueno, ya tenemos el constructor. Ahora vamos a por el metodo de dibujar.

> Este deberia de dibujar el boton en la pantalla y asignar los eventos.
> Tambi�n lo he escrito segun tu codigo:
>
> <code>
>
> // Para dibujarlo me parece lo mas logico que
> // necesite saber 2 cosas: Sobre que clip se va a dibujar
> // y en que profundidad dentro de ese movieclip
> Boton.prototype.dibujar = function(mc,prof){
>
>     file://---crear el clip contenedor
>   // Aqui se usan los 2 parametros para generar un nombre
>   // fijate como se guarda tambien la referencia al clip
>   // recien creado
>       this.clip = mc.createEmptyMovieClip("tHolder"+prof, prof);
>       this.clip._x = this.x;
>       this.clip._y = this.y;
>
>       file://---mostrar el cursor "mano"
>       this.clip.useHandCursor = true;
>
>       file://---creacion de campo de texto
>       this.clip.createTextField("myField", 1, 0, 0, this.width,
> this.height);
>
>       file://---el texto para el campo
>       this.clip.myField.text = this.texto;
>
>       file://---crear los estilos para campos
>       this.tFieldStyle = new TextFormat();
>       this.tFieldStyle.size = this.fontSize;
>       this.tFieldStyle.font  = this.fontType;
>       this.tFieldStyle.color= this.fontColor;
>       this.tFieldStyle.align= this.fieldAlign;
>
>       file://---si hemos definido el fondo de la caja
>       if (this.colorBackground != undefined){
>     trace(this.colorBackground)
>                   this.clip.myField.background = true;
>                   this.clip.myField.backgroundColor =
this.colorBackground;
>       }
>       file://---si hemos definido el borde de la caja
>       if (this.colorBorder != undefined){
>                   this.clip.myField.border = true;
>                   this.clip.myField.borderColor = this.colorBorder;
>       }
>       file://---aplicamos el formato
>       this.clip.myField.setTextFormat(this.tFieldStyle);
>
>    // Esto es lo mas lioso. El clip necesita una refencia a la instancia
>    // para poder leer las propiedades. Fijate como se usa en todos los
>    // eventos
>    this.clip.instancia = this;
>       file://---manejadores de eventos
>       this.clip.onRollOver = function(){
>                   this.myField.backgroundColor =
> this.instancia.colorBackgroundOver;
>                   this.myField.borderColor =
this.instancia.colorBorderOver;
>       }
>       this.clip.onPress = function(){
>                   this.myField.backgroundColor =
> this.instancia.colorBackgroundOver;
>                   this.myField.borderColor =
this.instancia.colorBorderOver;
>       }
>       this.clip.onRelease = function(){
>            // Aqui se usa la refencia para poder llamar al evento
>      // un evento no es mas que una llamada a un metodo que
>      // se debe de definir en la instancia, no en la clase.
>      // Porque cada instancia es logico que necesite hacer
>      // algo diferente
>      this.instancia.onClick();
>       }
>       this.clip.onRollOut = function(){
>                   this.myField.backgroundColor =
> this.instancia.colorBackground;
>                   this.myField.borderColor = this.instancia.colorBorder;
>                   this.myField.setTextFormat(this.instancia.tFieldStyle);
>       }
> }
>
> </code>
>
> Por ultimo un ejemplo de su uso:
>
> <code>
>
> // un uso muy basico
> var b = new Boton("Hola",100,200);
> b.dibujar(_root,1);
>
> // Modificando propiedades
> var b2 = new Boton("Soy un boton freaky",100,250);
> b2.colorBorder = "0xAABBCC"
> b2.width = 400;
> b2.dibujar(_root,2);
>
> // Utilizando el onClick
>
> b.onClick = function(){
>  // Como imaginas aqui puedes meter todo el AS que quieras
>  trace("Soy el boton 1, donde esta el 5?");
> }
> b2.onClick = function(){
>  trace("Soy el boton 2, donde esta el 5?");
> }
>
> </code>
>
> Bueno y por ahi van los tiros. Luego siempre se puede ampliar, pero el
> minitutorial de herencia lo dejamos para otro dia ;)
>
> Aqui tienes para asimilar, te saldran dudas, seguro, ya sabes tu pregunto
> que luego me lo cobrare en ca�as un dia 5 de estos. jeejeje
>
> un saludo
>
> Joseba Alonso
> www.sidedev.net
>
> <!-------------------------------
> Lista ASNativos:
> subscripciones/desubscripciones
> http://www.sidedev.net/asnativos
> -------------------------------->
>
>


<!-------------------------------
Lista ASNativos:
subscripciones/desubscripciones
http://www.sidedev.net/asnativos
-------------------------------->

Responder a