locked
Clase estática o instanciada, ¿cuales son las ventajas? RRS feed

  • Pregunta

  • Hola:

     Quisiera que alguien me explicara cuales son las ventajas y desventajas de usar clases estaticas con miembros estaticos y cuales son las ventajas y desventajas de instanciar la clase...¿cual de los dos es mejor?

    De antemano gracias por sus respuestas.


    Saludos desde Monterrey, Nuevo León, México!!!

    sábado, 11 de enero de 2014 5:45

Respuestas

  • Las clases estáticas son adecuadas cuando no tienen que almacenar información (salvo que ésta sea única y global), sino solo realizar cálculos. En cambio las clases que se instancian pueden contener variables de instancia, y cada una de las instancias sirve para contener una copia distinta de esas variables.

    Incluso en los casos en los que la clase no necesite contener información, puede ser que convenga utilizar una clase instanciada en lugar de una estática, ya que permite realizar inversión de control mediante inyección de dependencias. Esto se hace inyectando instancias en la clase que va a usarlas, y no funcionaría si la clase fuera estática. La razón mas habitual de realizar esta inyección de dependencias suele ser para testing, inyectando sobre la clase a probar una clase ficticia ("mock") con funciones sustitutivas de las de la clase real que se reemplaza.

    • Propuesto como respuesta ElTavo sábado, 11 de enero de 2014 19:54
    • Marcado como respuesta Omar Ortiz lunes, 13 de enero de 2014 16:55
    sábado, 11 de enero de 2014 9:24
    Moderador
  • hola

    parto de la base que no hay ventaja o desventaja, es mas para mi no son comparables ya que se usan segun la situacion, o sea lo que deberias conocer es en que caso usar una u otra

    por ejemplo si vas a definir una entidad de tu dominio, digamos una entidad cliente, que usarias, instancia o estaticas ? por supuesto aqui aplicarias instancias, porque cada cliente es diferente a otro y tiene sus atributos

    si tienes que haces un proceso de envio de mail, que usarias, instancia o estaticas ? aqui depende, si la funcionalidad en el desarrollo sera fija se podria usar static, pero si vas a querer codificar test la cosa cambia porque seguramente debas tener alguna interfaz con algun framework de IoC entonces para poder mockear la funcionalidad vas a tener ser instanciable

    o sea cada forma de declarar una clase aplica a una situacion, eso es lo que se de be conocer, pero no es que una es mejor que la otra

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Propuesto como respuesta ElTavo sábado, 11 de enero de 2014 19:54
    • Marcado como respuesta Omar Ortiz lunes, 13 de enero de 2014 16:55
    sábado, 11 de enero de 2014 11:14
  • ¿? Es algo completamente objetivo.

    Si vos tenés un método

    int Suma(int a, int b) { return a + b;)

    este método es estático. No requiere del objeto de la clase. Se vale por sí mismo.

    Si fuese

    int Suma() {return a + b;}

    vas a necesitar de la instancia que le proporcione los datos al método.


    [W]

    • Marcado como respuesta Omar Ortiz lunes, 13 de enero de 2014 16:55
    sábado, 11 de enero de 2014 11:51

Todas las respuestas

  • Las clases estáticas son adecuadas cuando no tienen que almacenar información (salvo que ésta sea única y global), sino solo realizar cálculos. En cambio las clases que se instancian pueden contener variables de instancia, y cada una de las instancias sirve para contener una copia distinta de esas variables.

    Incluso en los casos en los que la clase no necesite contener información, puede ser que convenga utilizar una clase instanciada en lugar de una estática, ya que permite realizar inversión de control mediante inyección de dependencias. Esto se hace inyectando instancias en la clase que va a usarlas, y no funcionaría si la clase fuera estática. La razón mas habitual de realizar esta inyección de dependencias suele ser para testing, inyectando sobre la clase a probar una clase ficticia ("mock") con funciones sustitutivas de las de la clase real que se reemplaza.

    • Propuesto como respuesta ElTavo sábado, 11 de enero de 2014 19:54
    • Marcado como respuesta Omar Ortiz lunes, 13 de enero de 2014 16:55
    sábado, 11 de enero de 2014 9:24
    Moderador
  • hola

    parto de la base que no hay ventaja o desventaja, es mas para mi no son comparables ya que se usan segun la situacion, o sea lo que deberias conocer es en que caso usar una u otra

    por ejemplo si vas a definir una entidad de tu dominio, digamos una entidad cliente, que usarias, instancia o estaticas ? por supuesto aqui aplicarias instancias, porque cada cliente es diferente a otro y tiene sus atributos

    si tienes que haces un proceso de envio de mail, que usarias, instancia o estaticas ? aqui depende, si la funcionalidad en el desarrollo sera fija se podria usar static, pero si vas a querer codificar test la cosa cambia porque seguramente debas tener alguna interfaz con algun framework de IoC entonces para poder mockear la funcionalidad vas a tener ser instanciable

    o sea cada forma de declarar una clase aplica a una situacion, eso es lo que se de be conocer, pero no es que una es mejor que la otra

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Propuesto como respuesta ElTavo sábado, 11 de enero de 2014 19:54
    • Marcado como respuesta Omar Ortiz lunes, 13 de enero de 2014 16:55
    sábado, 11 de enero de 2014 11:14
  • ¿? Es algo completamente objetivo.

    Si vos tenés un método

    int Suma(int a, int b) { return a + b;)

    este método es estático. No requiere del objeto de la clase. Se vale por sí mismo.

    Si fuese

    int Suma() {return a + b;}

    vas a necesitar de la instancia que le proporcione los datos al método.


    [W]

    • Marcado como respuesta Omar Ortiz lunes, 13 de enero de 2014 16:55
    sábado, 11 de enero de 2014 11:51
  • Hola

    Espero que las soluciones que te han proporcionado sean capaces de resolver tu consulta, de lo contrario te pido de favor desmarques la respuesta y nos lo hagas saber, esto se hace para tener un mayor control sobre los foros.

    Saludos


    <EL CONTENIDO SE PROVEE "COMO ES" SIN GARANTÍA DE NINGÚN TIPO, ASÍ SEA EXPRESA O IMPLÍCITA>
     
    Gracias
     
    MSDN/TechNet Soporte Comunidades
     
    Por favor, recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema.
    Es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    lunes, 13 de enero de 2014 16:56