Comunidad de diseño web y desarrollo en internet online

Ventajas y desventajas de las Clases con metodos estaticos..

Citar            
MensajeEscrito el 06 Feb 2009 04:27 pm
Hola como estan??.. espero que bien..

Quería preguntarles para tener mas opiniones con respecto a las Clases que tienen métodos estáticos.. es conveniente en cuestion de memoria?, no lo es? en ambos casos, porque?, etc...
por ejemplo yo uso una clase para validad mails:

Código ActionScript :

package phoxer.Validation{
   public class EmailValidator{
      public function isValidMail(email:String):Boolean{
         var emailEx:RegExp = /^[a-z][\w.-]+@\w[\w.-]+\.[\w.-]*[a-z][a-z]$/i;
         return emailEx.test(email);
      }
   }
}

para implementarla hay que importarla y hacer la referencia verdad?

Código ActionScript :

import phoxer.Validation.EmailValidator;

var vmail:EmailValidator = new EmailValidator();
vmail.isValidMail("[email protected]") //true

Ahora si la Clase tuviera la funcion Static: seria mas facil de implementar, pero como afecta este tipo de clases a la memoria??

Código ActionScript :

package phoxer.Validation{
   public class EmailValidator{
      public static function isValidMail(email:String):Boolean{
         var emailEx:RegExp = /^[a-z][\w.-]+@\w[\w.-]+\.[\w.-]*[a-z][a-z]$/i;
         return emailEx.test(email);
      }
   }
}

implementación:

Código ActionScript :

import phoxer.Validation.EmailValidator;
EmailValidator.isValidMail("[email protected]") //true

que piensan, o que experiencia tienen con este tipo de clases, ya que muchas a veces las hago estáticas y otras normales por asi decirlo..

Por phoxer

Claber

827 de clabLevel

4 tutoriales

Genero:Masculino  

Ing en Sistemas

firefox
Citar            
MensajeEscrito el 06 Feb 2009 05:29 pm
Hola phoxer

Mira... en la teoria de la OOP ninguna presenta ventajas a nivel de rendimiento. Alguna alternativa toma ventaja sobre la otra dependiendo la arqutiectura q estes armando, la funcionalidad que desees que tenga la clase, nivel de abstraccion, extensibilidad, etc...

Ahora bien... en la practica cada lenguaje hace lo q quiere y AS3 no es la excepcion... hace un tiempo estuve viendo este tema y probe lanzando el Profiling de Flex y vi que las variables estáticas siempre permanecen creadas y nunca se borran (aunq borres el swf donde este la clase con las variables estaticas), por ejemplo, si tenes una variable estatica q la inicializas con un array de REGEX, todos esos objetos quedan en momoria hasta q cerras el la pagina, por lo cual si es solo 2 o 3 objetos no pasa nada... pero si son mucho y sobre todo si tenes variables estaticas con objetos pesados (video, sonido, etc) puede q a la larga se vea afectada la performance.
En cuanto a las funciones estaticas especificamente no lo se, aun no hice pruebas, pero creo q tb debería guardar alguna referencia a esas funciones ya q estan relacionadas con la clase y no con alguna instancia (por ser estaticas)... la verdad q es una buena pregunta y seguro q en algun momento lo voy a revisar.


En cuanto a la practica del uso de metodos de clase (estaticos) o metodos de instancia (comunes), pues todo depende de lo que quieras hacer... tenes q armar un listado de funcionalidades (responsabilidades) que va a tener la clase y luego veras si cada metodo es estatico o no. La idea de usar metodos de clase es cuando una funcionalidad que no depende cambiar el estado de la clase, o sea, no modifica variables de instancia, sino que solo recibe un dato y le realiza una transformacion y devuelve una respuesta (aunq no es necesario q devuelva algo).

Muchas veces, dependiendo de como se estan armando las cosas, es comun q envez de tener una clase solo con metodos estaticos, es meter las funciones dentro del paquete directamente (como lo estan setInterval o setTimeOut...)

Código ActionScript :

packague com.pp
{
     public function miFuncion():void {}
}


Es una alternativa... por ej de esa manera podrias agrupar todas tus funciones de validacion sobre un mismo namespace (paquete) y no tendrias una clase para cada tipo de validacion....


Por otro lado... el tema de las validaciones siempre es un quilombillo.... yo ahora estoy armando un api de validacion utilizando como base el API de AS3, q son las clases q se encuentran dentro del paquete mx.validators (nose si estan disponibles para Flash tambien... si para Flex)... estoy extendendiendo la clase base y sus hijas para crear mis propios validadores... la verdad q esta muy bueno...

Bueno... q se yo... espero q te sirva algo de lo q escribi jajaja


Saludos!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 06 Feb 2009 05:51 pm
Por otro lado.... tampoco es descabellado utilizar una solucion mixta... por ejemplo Flex en su api de validacion, utliza tanto funciones de clase como funcinoes de instancia....

Asi q como veras... utilizar una u otra opcion o ambas juntas depende de la solucion q uno diseñe de la funcionalidad q quieras que tenga.

En mi caso estoy armando un Proxy (una capa de abstraccion) para el API de Validaciones.... asi q me cago en los metodos estaticos y solo utilizo metodos de instancia... pero bueno es una eleccion q hice porq estos tipo de metodos me dan la funcionalidad q necesito (antes de comenzar a programarlo hice un estudio de cual de los dos utilizar, porq la verdad como decis vos, los estaticos son mucho mas simples de usar... pero bue....)

Y esta quedando algo asi:

Código ActionScript :

this.validator = new ValidateForm();
this.validator.add(new ValidateFormItem("campain", NumberValidator, this.campainName,"text",true, true).add("min", 0).add("max", 10));


Pero bueno... de esta menara me permite agregarle un monton de funcionalidades extras al sistema comun de validacion de Flex...


Saludos!

Por alfathenus

833 de clabLevel

5 tutoriales

 

buenos aires || Argentina

firefox
Citar            
MensajeEscrito el 06 Feb 2009 07:03 pm
Gracias alfathenus, mis respetos hacia usted U_U

Yo pienso que para ese tipo de funciones o clases esta bien usar las Estaticas, no creo que tampoco afecte mucho la memoria.. por algo estaran sino los métodos estáticos jajjaa, pero como siempre cuanto mas optimización le demos a nuestros programas mejor. :)

Por phoxer

Claber

827 de clabLevel

4 tutoriales

Genero:Masculino  

Ing en Sistemas

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.