Principales respuestas
Clase estática o instanciada, ¿cuales son las ventajas?

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:24Moderador -
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:24Moderador -
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>GraciasMSDN/TechNet Soporte ComunidadesPor 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